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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
#1

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

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

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

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

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

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

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

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

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

Попытка реализовать односвязный линейный список - C++
Доброго времени суток! Пробую реализовать односвязный линейный список в виде структуры. #include <iostream> #include <cmath> using...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
06.04.2011, 18:40 #2
DiabloRossi, Можно замутить шаблонную стратегию обхода...

Между прочим в односвязном списке обход с лева-направо и справа-налево это крайне интересно. Как вы себе это представляете?)
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
06.04.2011, 18:59  [ТС] #3
Собственно, лично я это никак не представляю)
это задание такое, которые я совершенно не знаю, как делать)
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
06.04.2011, 19:50 #6
Rustam4853,
Цитата Сообщение от silent_1991 Посмотреть сообщение
ForEveR, извращенский способ - каждый раз начинать обход сначала и продвигаться вправо на один элемент меньше, чем на прошлой итерации. Сначала доходим до конца списка и выводим содержимое, затем до предпоследнего элемента и выводим содержимое и т.д.))
neske
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
06.04.2011, 21:51 #14
DiabloRossi, нет) мне просто было интересно написать класс списка с шаблонным параметром стратегии обхода.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
06.04.2011, 21:51 #15
Кстати на тему печати справа налево - рекурсией элементарно решается, в три строчки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2011, 21:51
Привет! Вот еще темы с ответами:

Реализовать иерархию классов, включающую в себя односвязный и двусвязный список - C++
Нужно реализовать иерархию классов, включающую в себя односвязный и двусвязный список. При компиляции программа выдает ошибку:&quot;Ошибка 1...

Реализовать односвязный список, элементы которого содержат целые числа - C++
1.1 «Список I». Реализовать односвязный список, элементы которого содержат целые числа. Реализовать при этом функции list_new() (создать...

Реализовать односвязный список для хранения данных вида: ФИО, группа, средний балл. - C++
Интересует именно структура(синтаксис) как это описать.Как в памяти оно выглядит я представляю и со структурами более-менее уже знаком.Если...

Односвязный список: уничтожить н-ный эл-т и на его место поместить эл-т, нр которого хранится в н-ном эл-те - C++
Написать функцию, которая уничтожает n-ный элемент в списке и на его место помещает элемент, номер которого хранится в n-ном элементе....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.04.2011, 21:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru