1 / 1 / 1
Регистрация: 05.06.2013
Сообщений: 27
|
||||||
1 | ||||||
Создание двухсвязного списка05.06.2013, 11:19. Показов 4722. Ответов 16
Метки нет (Все метки)
Есть задание:
Реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех типов: "целое число", "вещественное число", "строка". В разных узлах одного списка может быть любой объект одного из допустимых типов. Каждый объект должен иметь возможность вывести свое содержимое на консоль. У списка должен быть метод, выводящий все элементы. Класс списка реализовать с "нуля" (не используя темплейты, std::list или аналоги) При реализации класса "строка" можно использовать std::string. Есть код:
0
|
05.06.2013, 11:19 | |
Ответы с готовыми решениями:
16
Переписать с С# в С++. Реализация двухсвязного списка Формирование символьного двухсвязного списка Реализовать программно структуру линейного двухсвязного списка Не работает метод удаления элементов двухсвязного списка |
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
05.06.2013, 11:53 | 2 |
andrew1ee, сделайте в Node не int, а void* и при добавлении выделяйте память под нужный тип, ещё нужно будет поле типа добавить, чтобы знать что под void* кроется. Или можно union использовать, только вместо string придется char[] использовать.
0
|
1 / 1 / 1
Регистрация: 05.06.2013
Сообщений: 27
|
|
05.06.2013, 17:00 [ТС] | 3 |
А можно пример реализации ?
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||
05.06.2013, 17:59 | 4 | ||||||||||
0
|
1 / 1 / 1
Регистрация: 05.06.2013
Сообщений: 27
|
||||||
06.06.2013, 15:49 [ТС] | 5 | |||||
Куда конкретно вставить строки?:
0
|
1 / 1 / 1
Регистрация: 05.06.2013
Сообщений: 27
|
|
06.06.2013, 16:31 [ТС] | 7 |
А как теперь в Show() правильно записать cout c новыми переменными?
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|||||||||||
06.06.2013, 17:04 | 9 | ||||||||||
2Tulosba Нет, потому что это список для типа указатель, а не для типов "целое число", "вещественное число", "строка".
Тем более, вот такой вод код приведет к сегфолту при использовании Вашей идеи.
Добавлено через 7 минут Вопрос должен ли список знать о хранимым им типам? Я думаю нет. Если да, то правильной реализацией может быть такая конструкция
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
06.06.2013, 17:07 | 11 |
К Вашей идеи.
Нужно написать что-то рабочее, или нет?) Тем более в задании не сказано, как алоцируется эта переменная, и должен ли работать список с указателем на пеерменную или с копией переменной
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
06.06.2013, 17:07 | 12 |
В таком случае вообще правильнее завести общий базовый класс. Если не упираться на то, что исходные типы должны являться фундаментальными (char,int ... )
Имхо, слишком многословно для простого добавления в контейнер.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
06.06.2013, 17:11 | 13 |
В задании четко сказано, что за типы.
Такая задача, и в общем приблизительно так реализуется и дженерик Си лист, только там лис однотипен и данные функции инициализируются в "конструкторе".
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
06.06.2013, 17:19 | 14 |
Чётко, говорите? С такой формулировкой, если честно, самое правильно свою иерархию классов построить. А не переносить решение проблемы C++ кода в плоскость языка C.
Добавлено через 1 минуту А эта фраза, собственно, еще более подтверждает идею о базовом классе и виртуальных функциях.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
06.06.2013, 17:23 | 15 |
Не по теме:
Добавлено через 3 минуты Не спорю, если типами выступает класс а не встроенные типы данных.
0
|
1 / 1 / 1
Регистрация: 05.06.2013
Сообщений: 27
|
||||||
06.06.2013, 19:08 [ТС] | 16 | |||||
Если честно я запутался. Немного пугают слова. "Никто не обещал, что это будет работать". Какой вариант использовать для решения задачи?
В
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
07.06.2013, 10:24 | 17 |
Суть этой фразы в том, что при предложенном подходе, добавляемые в список данные, должны быть расположены в динамической памяти (т.е. создаваться через new).
Но так как хранимыми типами у Вас выступают некие "целое число", "вещественное число", "строка" (а не конкретные типы: int, double, char*), то правильнее всего будет реализовать иерархию классов с общим базовым типом. Вместо использования void* или union.
0
|
07.06.2013, 10:24 | |
07.06.2013, 10:24 | |
Помогаю со студенческими работами здесь
17
Добавление элементов в любое место двухсвязного списка Реализация двухсвязного списка Чем отличается Дек от Двухсвязного списка? Выгрузка двухсвязного списка в файл и загрузка из файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |