Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 15:57     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #1
Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. В качестве примера использовать случай, когда хранятся элементы целого типа, а пользователю необходимо три варианта обхода:

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

Добавлено через 5 часов 23 минуты
кто подскажет(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2011, 15:57     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем.
Посмотрите здесь:

Реализовать односвязный список и обеспечить его сортировку по одному из полей структуры. C++
Реализовать односвязный список для хранения данных вида: ФИО, группа, средний балл. C++
C++ Реализовать односвязный список для хранения
C++ Реализовать односвязный список, элементы которого содержат целые числа
Односвязный кольцевой список, реализовать C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.04.2011, 18:40     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #2
DiabloRossi, Можно замутить шаблонную стратегию обхода...

Между прочим в односвязном списке обход с лева-направо и справа-налево это крайне интересно. Как вы себе это представляете?)
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 18:59  [ТС]     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #3
Собственно, лично я это никак не представляю)
это задание такое, которые я совершенно не знаю, как делать)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.04.2011, 19:35     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #4
ForEveR, извращенский способ - каждый раз начинать обход сначала и продвигаться вправо на один элемент меньше, чем на прошлой итерации. Сначала доходим до конца списка и выводим содержимое, затем до предпоследнего элемента и выводим содержимое и т.д.))
Rustam4853
3 / 3 / 0
Регистрация: 31.03.2011
Сообщений: 20
06.04.2011, 19:48     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #5
DiabloRosi, мб ты условие задания не так скопировал??? наверное я чего не понимаю... но как в односвязном списке идти и слева на право , и справо на лево???? если кто в курсе я очень хочу тоже так делать ))) подскажите пожалуйста как????
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.04.2011, 19:50     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #6
Rustam4853,
Цитата Сообщение от silent_1991 Посмотреть сообщение
ForEveR, извращенский способ - каждый раз начинать обход сначала и продвигаться вправо на один элемент меньше, чем на прошлой итерации. Сначала доходим до конца списка и выводим содержимое, затем до предпоследнего элемента и выводим содержимое и т.д.))
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
06.04.2011, 19:51     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #7
Интересный способ )
Rustam4853
3 / 3 / 0
Регистрация: 31.03.2011
Сообщений: 20
06.04.2011, 19:55     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #8
уахахахахахахахахахахахахахахахах...... так вот оно что это ....... терь понятно ..... реальное извращение............ забавная задачка........

Добавлено через 47 секунд
я это не читал а следовало быть повнимательнее ))) а я то думал )).....
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 20:16  [ТС]     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #9
Условие я просто скопировал.) ничего не меняя)
Дак кто напишет этот ужас?)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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();
}
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 21:42  [ТС]     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #11
Расскажи в двух словах логику данной программы)
как в ней реализовано задание логики обхода пользователем?)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.04.2011, 21:45     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #12
DiabloRossi, Шаблонным параметром, который работает со списком (в данном случае конкретным классом LinearListImpl). В этом шаблонном параметре (задающим обход) должен быть конструктор - который инициализирует список в классе обхода и функция обхода под названием print. Создаем список. Заполняем. Печатаем. Функция print в классе LinearList создает объект класса PS который является шаблонным параметром (стратегия обхода), передавая этому объекту уже построенный список, использует конструктор копирования списка внутри шаблонного класса и выводит список на экран. Достаточно прозрачно?
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 21:50  [ТС]     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #13
Смутно.
Вот это реализовано?
* все элементы слева-направо
* только четные элементы слева-направо
* все элементы, но только справа-налево
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.04.2011, 21:51     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #14
DiabloRossi, нет) мне просто было интересно написать класс списка с шаблонным параметром стратегии обхода.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.04.2011, 21:51     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #15
Кстати на тему печати справа налево - рекурсией элементарно решается, в три строчки.
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 21:52  [ТС]     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #16
Цитата Сообщение от ForEveR Посмотреть сообщение
DiabloRossi, нет) мне просто было интересно написать класс списка с шаблонным параметром стратегии обхода.
Блин, так не интересно)
я все равно не смогу его дописать..
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.04.2011, 21:52     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #17
silent_1991, Скинь пример в личку или приведи тут - интересно, а думать лень)
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 21:57  [ТС]     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #18
Дыа)
Допишите предыдущий код и будет отлично)

Добавлено через 3 минуты
По идее мне завтра вечером край уже надо сдать(
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
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 << " <- ";
    }
}
Вроде ничего не путаю)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2011, 15:50     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем.
Еще ссылки по теме:

Односвязный список: уничтожить н-ный эл-т и на его место поместить эл-т, нр которого хранится в н-ном эл-те C++
C++ Реализовать односвязный список студентов
C++ Реализовать односвязный список и вектор

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

Или воспользуйтесь поиском по форуму:
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
07.04.2011, 15:50  [ТС]     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. #20
Блин, схелпуйте кто-нить..
Yandex
Объявления
07.04.2011, 15:50     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем.
Ответ Создать тему
Опции темы

Текущее время: 01:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru