Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2016, 15:15   #1
drako08
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 30
По умолчанию Создать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL.

Создать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list
библиотеки STL. Написать тестирующую программу, которая в тестовом режиме
выполняет операции над сформированными сложными структурами. Перечень операций
должен быть классическим для сложных структур (с учетом ограничений на обработку
конкретной структуры):
 создание пустой сложной структуры;
 добавление элемента в структуру до и после текущего элементы;
 удаление любого элемента в структуре;
 поиск элемента с заданными свойствами в структуре;
 сортировка элементов структуры;
 печать элементов структуры на экран;
 удаление всей структуры.

Помогите пожалуйста
drako08 вне форума Ответить с цитированием
Старый 30.11.2016, 03:57   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Это же элементарное задание, что не осилил?
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 30.11.2016, 15:17   #3
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от drako08 Посмотреть сообщение
Помогите пожалуйста
http://mylinuxprog.blogspot.com/2016/03/stl-c.html
Цитата:
Адаптеры. Часть 15
olej.tsil вне форума Ответить с цитированием
Старый 02.12.2016, 21:15   #4
drako08
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 30
По умолчанию

Можно пожалуйста пример очереди другое сам сделаю нужно понинять как
drako08 вне форума Ответить с цитированием
Старый 03.12.2016, 17:52   #5
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от drako08 Посмотреть сообщение
Можно пожалуйста пример очереди другое сам сделаю нужно понинять как
Куда уж более примеров, чем по ссылке которую я нарисовал.

Или в облом смотреть? ... так с этого и надо бы начинать...
olej.tsil вне форума Ответить с цитированием
Старый 03.12.2016, 18:20   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Пример какой-то есть в книге Стивена Прата (эмуляция очереди в банкомат):

0.jpg

Только мне кажется (могу ошибаться) там создаётся класс Queue "с нуля"
(обрати внимание, именно с большой буквы "Q", дело в том что есть в STL класс "queue" специально предназначенный для очереди)... Обрати внимание на функции:

1.jpg

Но ведь все эти (и не только эти) методы есть уже в описании класса list:

2.jpg

p.s.1: немного не понятна фраза "на базе класса list библиотеки STL". Вот если бы её не было, тогда было бы понятно что делать, а так... Хотя предполагаю, что это должно как-то облегчить тебе задание. Возможно имелось ввиду что то подобное:

3.jpg

Ну ты понял, да? В примере создаётся контейнер из целых чисел ("int") а тебе надо из своего, вновьсозданноего типа структура...
Хотя... Если будешь действовать (развивать мысль) по последнему примеру, тогда в твоём задании будет не понятна другая фраза: "Создать пользовательские классы"...


p.s.2: знаешь что - возьми и поэкспериментируй на простых примерах:



http://ci-plus-plus-snachala.ru




4.jpg

Не просто переписуй код, а именно осознано...
ura_111 вне форума Ответить с цитированием
Старый 03.12.2016, 19:32   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Обобщу. Непонятки с заданием:

1) Если бы фразы: "на базе класса list библиотеки STL" не было бы, тогда нужно было делать по книге Прата (у него, для удобства, код разбит по файлам, но можно и совместить в одном).
2) Если предыдущую фразу оставить, но убрать "Создать пользовательские классы", - тогда нужно делать как по ссылке (чёрные экраны смотри - только вместо понятного типа "int" будет твой-пользовательский тип данных)
3) А вот с обоими фразами одновременно - непонятно что требуется тебе делать... Может быть имелось ввиду какой-то механизм наследования (пользовательский класс - потомок от list, и наследует все его методы: удалить весь список, создать новый узел очереди/стека/дек, удалить отдельный узел, поиск по узлам....) Или нет, а нужно все эти методы (по заданию которые) описывать самому?
4) Непонятно словосочетание: "сложными структурами". "Структура" - это то, что описывает ключевое понятие С++ ("strurct") или под "структурой" имелось ввиду: "совокупность данных в пользовательском классе"?
От этого зависит где будут храниться ссылки "из текущего экземпляра класса на следующий экземпляр" (это нужно для образования связи между экземплярами). Например:

11.jpg

12.jpg

Все эти вопросы решаются простым сопоставлением с учебной программой, которую вы проходили на парах...
И ещё обрати внимание "одна ссылка" (а не две) это связано с тем что в примерах список однонаправленный, а если у тебя двунаправленный, тогда нужно две ссылки предусматривать (я не помню, где-то мелькнуло или стек или очередь - представитель двунаправленного списка). Разберись когда нужно идти по списку только в одном направлении, а когда и взад и вперед (короче с теорией познакомься)...

Последний раз редактировалось ura_111; 03.12.2016 в 20:14.
ura_111 вне форума Ответить с цитированием
Старый 03.12.2016, 20:27   #8
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ну вот например, однонаправленный список (обрати внимание на ссылки. Ошибся: ссылка в 3-м экземпляре - NULL):

13.jpg

p.s.: забыл сказать, я не специалист в программировании (а реально только учусь), поэтому могу вводить в заблуждение, рекомендовать ложные пути (учти это)...
Но ведь тебе надо с чего-то начинать...

Последний раз редактировалось ura_111; 03.12.2016 в 20:30.
ura_111 вне форума Ответить с цитированием
Старый 03.12.2016, 23:38   #9
drako08
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 30
По умолчанию

Код:
#include <iostream>
#include <list>
 
template <typename T>
class MyStack
{
public:
    MyStack(std::initializer_list<T> l) : m_data(l) {}
    void push(T &&x) { m_data.push_back(x); }
    void push(const T &x) { m_data.push_back(x); }
    void pop() { m_data.pop_back(); }
    T& top() { return m_data.back(); }
    const T& top() const { return m_data.back(); }
    bool empty() const { return m_data.empty(); }
    size_t size() const { return m_data.size(); }
 
protected:
    std::list<T> m_data;
};
 
int main()
{
    MyStack<int> st = {1, 2, 3, 4, 5};
    for (int i=6; i < 11; i++)
        st.push(i);
    std::cout << st.size() << ": ";
    while (!st.empty())
    {
        std::cout << st.top() << " ";
        st.pop();
    }
}
Вот я реализовал стек на базе письмо а как тогда организовать двухзвязний список и очередь помогите пожалуйста

Последний раз редактировалось drako08; 03.12.2016 в 23:42.
drako08 вне форума Ответить с цитированием
Старый 04.12.2016, 08:05   #10
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Да... Посмотрел я на код и понял - ты знаешь больше моего и это мне надо тебе вопросы задавать, а не наоборот... Я пытался немного поэкспериментировать с кодом и у меня появились вопросы:

1) Что делает этот код? (и без него программа нормально работает):

1.jpg

Я пытался в программе удалить ещё что-нибудь, но мне ошибки выдавала (наверно остальные куски кода всё-таки нужны), поэтому вопрос только по тому что отметил: зачем это?

2) А вообще, это ты писал код или просто где-то слизал?
3) Давай поговорим о стеке (то что уже написано)...

а) Ты спрашиваешь: как сделать двухзвязний список? А разве использование "list" уже не создаёт двухзвязний список?

2.jpg

Дело в том, что в STL есть ещё (кроме "list") и "stack" (для организации стека), и "queue" (для организации очереди) и, наверное, ещё что-то есть... Поэтому у меня возник вопрос: "Может в задании ошибка, может для стека нужно один тип использовать, а для очереди другой?".

б) Покажи мне на примере, как у тебя организована связь в стеке... Или простой, последовательный вывод (использование "st.top()") - это оно и есть?.
в) А что, программа только один раз выводит список и сразу его удаляет; а если нужно продемонстрировать свойство стека: удалить один (два) элемента и вывести то что получилось (что бы посмотреть из чего было удалено: из конца списка или из начала, а может из середины)...


p.s.: пиши чё думаешь.
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
«Очередь. Стек. Дек» (TurboPascal) Aunura11 Помощь студентам 5 10.06.2014 18:32
С++. Создать базовый класс список. Реализовать на базе списка стек и очередь... Объяснить программу (написать комментарии) the_faceless Помощь студентам 0 17.02.2014 01:54
C++, из LIFO в FIFO Виталюкас Помощь студентам 2 01.06.2012 10:34
Очередь, стек, дек в Delphi Katen'ka Помощь студентам 1 12.06.2009 22:23