Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
1

Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем.

06.04.2011, 15:57. Показов 2451. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. В качестве примера использовать случай, когда хранятся элементы целого типа, а пользователю необходимо три варианта обхода:

* все элементы слева-направо
* только четные элементы слева-направо
* все элементы, но только справа-налево

Добавлено через 5 часов 23 минуты
кто подскажет(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2011, 15:57
Ответы с готовыми решениями:

Создать класс «Квартира», в котором список комнат реализовать как односвязный список
Добрый день,написал фот такой клас по заданию:Создать класс «Квартира», в котором список комнат...

Что такое односвязный список и как его реализовать
Господа, что такое односвязный список и как его реализовать в шарпе. Всем спасибо

Реализовать односвязный список и обеспечить его сортировку по одному из полей структуры.
Реализовать односвязный список и обеспечить его сортировку по одному из полей структуры. зарание...

Сформировать односвязный список, вывести на консоль отрицательные значения его элементов
сформировать односвязный список.Просмотреть в обратном направлении и вывести на консоль...

22
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.04.2011, 18:40 2
DiabloRossi, Можно замутить шаблонную стратегию обхода...

Между прочим в односвязном списке обход с лева-направо и справа-налево это крайне интересно. Как вы себе это представляете?)
0
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 18:59  [ТС] 3
Собственно, лично я это никак не представляю)
это задание такое, которые я совершенно не знаю, как делать)
0
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.04.2011, 19:35 4
ForEveR, извращенский способ - каждый раз начинать обход сначала и продвигаться вправо на один элемент меньше, чем на прошлой итерации. Сначала доходим до конца списка и выводим содержимое, затем до предпоследнего элемента и выводим содержимое и т.д.))
1
3 / 3 / 0
Регистрация: 31.03.2011
Сообщений: 20
06.04.2011, 19:48 5
DiabloRosi, мб ты условие задания не так скопировал??? наверное я чего не понимаю... но как в односвязном списке идти и слева на право , и справо на лево???? если кто в курсе я очень хочу тоже так делать ))) подскажите пожалуйста как????
0
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.04.2011, 19:50 6
Rustam4853,
Цитата Сообщение от silent_1991 Посмотреть сообщение
ForEveR, извращенский способ - каждый раз начинать обход сначала и продвигаться вправо на один элемент меньше, чем на прошлой итерации. Сначала доходим до конца списка и выводим содержимое, затем до предпоследнего элемента и выводим содержимое и т.д.))
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
06.04.2011, 19:51 7
Интересный способ )
0
3 / 3 / 0
Регистрация: 31.03.2011
Сообщений: 20
06.04.2011, 19:55 8
уахахахахахахахахахахахахахахахах...... так вот оно что это ....... терь понятно ..... реальное извращение............ забавная задачка........

Добавлено через 47 секунд
я это не читал а следовало быть повнимательнее ))) а я то думал )).....
0
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 20:16  [ТС] 9
Условие я просто скопировал.) ничего не меняя)
Дак кто напишет этот ужас?)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.04.2011, 21:38 10
На тему стратегии обхода (печати). Можно замутить еще большую абстракцию путем использования шаблонного параметра списка в print-е...
Вроде бы не ошибся особо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
 
template
<
    class T
>
class LinearListImpl
{
public:
    struct Node
    {
        Node(T elem_=T()):elem(elem_), next(0), prev(0)
        {
        }
        Node* next;
        Node* prev;
        T elem;
    };
    LinearListImpl():head(0), tail(0)
    {
    }
    LinearListImpl(const LinearListImpl& other):head(0), tail(0)
    {
        for(Node* t=other.head; t; t=t->next)
            push_back(t->elem);
    }
    ~LinearListImpl()
    {
        Node* tmp=head;
        while(tmp)
        {
            head=head->next;
            delete tmp;
            tmp=head;
        }
    }
    void push_back(T elem_)
    {
        Node* t=new Node(elem_);
        if(!head)
        {
            head=t;
            tail=t;
            return;
        }
        tail->next=t;
        tail=t;
    }
    Node* head;
    Node* tail;
};
template
<
    class T
>
class NormalListPrint
{
public:
    NormalListPrint(const LinearListImpl<T>& other):impl(new LinearListImpl<T>(other))
    {
    }
    ~NormalListPrint()
    {
        delete impl;
    }
    void print()
    {
        for(typename LinearListImpl<T>::Node* node=impl->head; node; node = node->next)
            std::cout<<node->elem<<'\n';
    }
private:
    LinearListImpl<T>* impl;
};
 
template
<
    class T,
    template <class> class PrintStrategy
>
class LinearList
{
public:
    typedef PrintStrategy<T> PS;
    typedef LinearListImpl<T> LSImpl;
    LinearList():impl(LSImpl())
    {
    }
    void push_back(T elem_)
    {
        impl.push_back(elem_);
    }
    void print()
    {
        PS printer(impl);
        printer.print();
    }
private:
    LSImpl impl;
};
 
int main()
{
    LinearList<int, NormalListPrint> lst;
    lst.push_back(10);
    lst.push_back(30);
    lst.push_back(100);
    lst.push_back(15);
    lst.print();
}
0
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 21:42  [ТС] 11
Расскажи в двух словах логику данной программы)
как в ней реализовано задание логики обхода пользователем?)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.04.2011, 21:45 12
DiabloRossi, Шаблонным параметром, который работает со списком (в данном случае конкретным классом LinearListImpl). В этом шаблонном параметре (задающим обход) должен быть конструктор - который инициализирует список в классе обхода и функция обхода под названием print. Создаем список. Заполняем. Печатаем. Функция print в классе LinearList создает объект класса PS который является шаблонным параметром (стратегия обхода), передавая этому объекту уже построенный список, использует конструктор копирования списка внутри шаблонного класса и выводит список на экран. Достаточно прозрачно?
0
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 21:50  [ТС] 13
Смутно.
Вот это реализовано?
* все элементы слева-направо
* только четные элементы слева-направо
* все элементы, но только справа-налево
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.04.2011, 21:51 14
DiabloRossi, нет) мне просто было интересно написать класс списка с шаблонным параметром стратегии обхода.
0
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.04.2011, 21:51 15
Кстати на тему печати справа налево - рекурсией элементарно решается, в три строчки.
1
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 21:52  [ТС] 16
Цитата Сообщение от ForEveR Посмотреть сообщение
DiabloRossi, нет) мне просто было интересно написать класс списка с шаблонным параметром стратегии обхода.
Блин, так не интересно)
я все равно не смогу его дописать..
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.04.2011, 21:52 17
silent_1991, Скинь пример в личку или приведи тут - интересно, а думать лень)
0
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 21:57  [ТС] 18
Дыа)
Допишите предыдущий код и будет отлично)

Добавлено через 3 минуты
По идее мне завтра вечером край уже надо сдать(
0
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.04.2011, 22:06 19
ForEveR, к примеру:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void reverse_print() const
{
    reverse_print_helper(_head);
}
 
void reverse_print_helper(Node *elem) const
{
    if (elem != 0)
    {
        reverce_print_helper(elem->_next);
        
        std::cout << elem->_value << " <- ";
    }
}
Вроде ничего не путаю)))
2
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
07.04.2011, 15:50  [ТС] 20
Блин, схелпуйте кто-нить..
0
07.04.2011, 15:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2011, 15:50
Помогаю со студенческими работами здесь

Переделать программу, чтобы скорость вращения задавалась пользователем
Подскажите пожалуйста такая программа: package laba3; import java.awt.*; import...

Реализовать односвязный список и вектор
Array.h (описание классов) #ifndef ARRAY// if not defined #define ARRAY Class ARRAY{ Public ...

Реализовать односвязный список студентов
В моем коде нужно реализовать односвязный список, нужно реализовать операцию вставки нового...

Односвязный кольцевой список, реализовать
Помогите написать и реализовать кольцевой список


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru