Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/146: Рейтинг темы: голосов - 146, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 12.06.2011
Сообщений: 7

Шаблон класса двусвязный список

12.06.2011, 17:12. Показов 31548. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для решения задачи описать и использовать шаблон класса "двусвязный список".
Необходимо составить программу которая содержит динамическую информацию о наличии автобусов в автобусном парке. сведения о каждом автобусе содержат: 1)номер; 2)фамилию водителя; 3)номер маршрута; 4)признак того, где находится автобус - на маршруте или в парке. Программа должна обеспечивать:
1) начальное формирование данных о всех автобусах в виде списка;
2) при выезде каждого автобуса из парка вводится номер автобуса, и программа устанавливает значение признака "автобус на маршруте";
3) при въезде каждого автобуса в парк вводится номер автобуса, и программа устанавливает значение признака "автобус в парке";
4) по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте.

Проблема как раз в составлении шаблона. Задание главным образом состоит в написании шаблона класса "двусвязный список" без использования встроенных типа <list> или <vector>. Ниже то, что я успела сделать. Может кто потратит немного времени на набросок или замечпния по коду, хотя бы подсказать в каком направлении мне двигаться. Спасибо


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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include "stdafx.h"
#include <string>
#include <conio.h>
#include <iostream>
 
using namespace std;
 
class spisok
{
    struct element              
    {
        string number;          //Номер автобуса
        string driver;          //Водитель
        string route;           //Маршрут
        bool deport;            //Признак того, где находится автобус (в автопарке или на маршруте)        
        element *next;          //Указатель на следующий элемент списка
        element *prev;          //Указатель на предыдущий элемент списка
        element *head;          //Указатель на первый элемент списка
        element *tail;          //Указатель на последний элемент списка
 
                                
        element (): number(0), driver(0), route(0), next(0),prev (0), head (NULL), tail (NULL)
        {}
    }
 
    *bus;
 
    public:
        string get_number()         { return bus->number;           }
        string get_route()          { return bus->route;            }
        string get_driver()         { return bus->driver;           }
        bool get_deport()           { return bus->deport;           }
 
        element &operator [] (int index)                        //Перегрузка оператора индексирования
        {
            return bus[index];
        }
 
        element operator = (element *current)                   //Перегрузка оператора присваивания
        {
            return element( bus->number = current->number,
                            bus->driver = current->driver,
                            bus->route  = current->route,
                            bus->deport = current->deport,
                            bus->next   = current->next,
                            bus->prev   = current->prev);
        }
        spisok() : bus(0) {}//конструктор по умолчанию класса spisok
 
        element *new_bus(string num, string dr, string r)
        {
            bus = new element();
            bus->number = num;
            bus->driver = dr;
            bus->route = r;
            bus->prev = bus->tail;
            bus->next = NULL;
            if (bus->tail != NULL)
                bus->tail->next = bus;
            if(bus->head == NULL)
                bus->head = bus;
            bus->tail = bus;
            return bus;
        }
 
        void print()                //ф-ция печати
        {
            element *E = bus;
 
            while(E
            {
                cout<<E->number
                    <<"\t"<<E->driver
                    <<"\t"<<E->route;
                E = E->next;
            }
            cout<<"\n";
        }
 
        void search(string par_search)//ф-ция поиска. содержит par_search, к-ый определяет что искать
        {
            element *E = bus;
            if (bus == 0)//если список пуст, то ничего не ищется, выход из программы
                return;
 
            while(E)//сам цикл поиска
            {
                if (par_search == E->number)//если par_search, к-ый мы ввели, совпадает с номером автобуса в списке
                {
                    cout<<"\n"<<bus->number //то распечатывает
                        <<"\t"<<bus->driver
                        <<"\t"<<bus->route
                        <<"\n";
                    break;
                }
                E = E->next;//проверяет следующий элемент списка
            }
        }
 
        void in_deport() {bus->deport = false;}
        void on_route() {bus->deport = true;}
 
        void delete_spisok()//
        {
            if(bus == 0)//если список пуст, то ничего не удаляется, выход из программы
                return;
            element *E = bus;//в противном случае идет удаление
            bus = bus->next;
            delete E;
        }
 
        ~spisok()//деструктор 
        {
            while(bus)
                delete_spisok();
        }
};
 
 
void main()
{
    spisok bus[100];
    string number;
    string route;
    string driver;
    string number_build;
    string index;
    int i,q = 0;
    int size = 0;
    string par_search;
    int num;
    
    int CV = 0;
    while (CV != 5)
    {
        cout << endl << "Menu: \n"
        << "1. New bus \n"
        << "2. Show spisok \n"
        << "3. Delete bus \n"
        << "4. Search bus\n"
        << "5. Exit \n"
        <<"Input number menu:  ";
 
        cin >> CV;
        switch(CV)
        {
                case 1: 
                    {
                        cout<<" Name number: "; cin>>number;
                        cout<<" driver: ";      cin>>driver;
                        cout<<" route: ";       cin>>route;
 
                        bus[q].new_bus(number, driver, route);
                        q++;                                                        
                        size = q;                                                   
                    }  break;
 
                case 2:
                    { 
                        for (i = 0; i < size; i++)
                        bus[i].print();//вызывается ф-ция печати
                    }  break;
 
                case 3:
                    {
                        cout<<"\nVvedite nomer:";//вводится номер записи которую надо удалить
                        cin>>i;
                            bus[i].delete_spisok();//вызывается ф-ция удаления записи
                    }  break;
 
                case 4: 
                    {
                        cout<<"\nEnter number bus: ";
                        cin>>par_search;//вводится параметр поиска, т.е. номер автобуса
                        for (int i = 0; i < size; i++)
                        bus[i].search(par_search);//вызывается ф-ция поиска
                    }  break;
 
                case 5:  break;
 
            default: cout << endl << "Enter right number!\n"; break;
        }
 
    _getch();
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2011, 17:12
Ответы с готовыми решениями:

Шаблон класса двусвязный список
Доброго времени суток! Препод дал задание реализовать шаблон класса двусвязный список. Сам класс написал, но не знаю как сделать из него...

Кольцевой двусвязный список шаблон класса ошибки
Код выдаёт некоторые ошибки (прикрепили, на картинке): Что исправить? #include &quot;StdAfx.h&quot; #ifndef __list ...

Составить двусвязный список на основе класса, объекты которого будут формировать этот список
Составить двусвязный список на основе класса, объекты которого будут формировать этот список. В описание класса должны входить данные для...

23
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.06.2017, 15:19
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Степан174174 Посмотреть сообщение
но для этого компаратора тоже же нужны функторы?
Функтор по сути и будет компаратором.
0
0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 31
05.06.2017, 15:27
Цитата Сообщение от MrGluck Посмотреть сообщение
Функтор по сути и будет компаратором.
не много не пойму. Компаратор это же функция sort? То есть непосредственно она двигает элементы по списку, но ей же как то надо понимать когда нужно двигать (когда какое то поле больше) и когда не нужно двигать (когда какое то поле меньше или равно). Или я что то не так понимаю?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.06.2017, 15:42
Степан174174, компаратор - это объект, с помощью которого функция типа std::sort сравнивает два элемента. По аналогии с устройством из электроники. То есть функция sort программирует алгоритм, а для сравнения использует переданный объект (компаратор). Эти элементы работают на разному уровне абстракции.

Добавлено через 1 минуту
Посмотрите тут ещё пример:
http://www.cplusplus.com/reference/algorithm/sort/
C++
1
2
template <class RandomAccessIterator, class Compare>
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
Добавлено через 50 секунд
http://en.cppreference.com/w/cpp/algorithm/sort
comp - comparison function object (i.e. an object that satisfies the requirements of Compare) which returns ​true if the first argument is less than (i.e. is ordered before) the second.
The signature of the comparison function should be equivalent to the following:
C++
1
 bool cmp(const Type1 &a, const Type2 &b);
The signature does not need to have const &, but the function object must not modify the objects passed to it.
The types Type1 and Type2 must be such that an object of type RandomIt can be dereferenced and then implicitly converted to both of them. ​
1
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
05.06.2017, 15:44
компаратором, я так понимаю, много что может быть что угодно типа bool с двумя входными параметрами одного типа
например так
C++
1
2
3
4
5
6
    struct {
        bool operator()(int left, int right) const{   
            return left < right;
        }   
    } Lesser;
    sort(s.begin(), s.end(), Lesser);
или так
C++
1
2
3
    sort(s.begin(), s.end(), [](int a, int b) {
        return b < a;   
    });
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2017, 15:44

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

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

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

Реализовать классы «стек» и «очередь» наследованием от базового класса «двусвязный список»
Всем добрый вечер! Помогите пожалуйста с лабораторной работой, дело в том что скоро сдавать, а я в С++ новичок. и совсем не понимаю как это...

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


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru