|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
Реализовать двунаправленный список в духе списка из STL11.02.2011, 20:37. Показов 7272. Ответов 44
Метки нет (Все метки)
Все-таки видимо у меня всегда останутся с этим проблемы.
Само определение скидывать не буду, я пытаюсь сделать, что-то вроде STL-ного списка. Спросить хочу только одно.
Хотя вообще как я понял это для однонаправленного только катит... А вот как сделать для двунаправленного - второй день догнать не могу.
0
|
||||||
| 11.02.2011, 20:37 | |
|
Ответы с готовыми решениями:
44
Двунаправленный список. Отрицательные элементы списка перенести в начало списка Двунаправленный список - реализовать работу с данными о ПК |
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
| 11.02.2011, 20:53 | ||||||
|
Ну так вы перед тем, как tail'у присваивать tmp, установите в tmp prev-указатель на tail.
Добавлено через 2 минуты Т.е. так:
1
|
||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 11.02.2011, 20:56 [ТС] | |
|
silent_1991, Офигеть... столько проколебался а все так просто... шок)
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
||||||
| 11.02.2011, 20:56 | ||||||
|
Ссылки на предыдущий элемент нет, потому что ты её не устанавливаешь.
Опоздал...
1
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 11.02.2011, 21:01 | |
|
ForEveR, когда списки пишешь - очень удобно на бумажке рисовать квадратики и стрелочки, соответствующие установке связок в алгоритме. Вот так нарисовал стрелочки и увидел, что одной не хватает - сразу понятно, что надо добавить. Попробуйте)))
Не по теме: С "Ну так вы перед..." как-то грубовато вышло, извиняюсь)))
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 11.02.2011, 22:21 [ТС] | ||||||
|
Ниже код. Есть несколько вопросов.
Не могу понять как сделать push_back/front через итераторы. Не получается. Хотелось бы увидеть простой пример на одну из данных функций. функция back() - выдает ошибку, ибо end() у меня указывает на элемент за последним, то есть tail->next. Так как tail->next == 0 то --end() не выходит, ибо curr=curr->prev где curr == tail->next, вследствие чего - ошибка. Как исправить? Ну и плоховато дело с erase. Буду благодарен за помощь.
0
|
||||||
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 11.02.2011, 23:47 | |
|
ForEveR, если я не ошибаюсь, std::list является кольцевым двусвязным списком, и при этом даже когда он пуст, в нём присутствуют два элемента — начало и конец. А новые элементы при добавлении встраиваются между ними. Таким образом решается проблема с итераторами.
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 11.02.2011, 23:55 [ТС] | |
|
volovzi, Не очень хочется делать список кольцевым... Есть какая-то другая возможность, без переделывания списка?
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 12.02.2011, 00:00 | |
|
Точно не скажу, но список в стл всё-таки по-моему не кольцевой. А то, что все его элементы вставляются между start (первым элементом) и end (фиктивным элементом, следующим за последним) - это да. Собственно, я и не понимаю, как список с такими параметрами может быть кольцевым (когда есть чёткое начало и, хоть и фиктивный, но всё же конец).
1
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
||||||
| 12.02.2011, 00:01 | ||||||
|
ForEveR, как сделать без зацикливания так сходу не соображу, надо подумать.
Добавлено через 1 минуту Вот цитата из СБШ:
2
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 12.02.2011, 00:03 | |
|
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 12.02.2011, 00:28 [ТС] | |
|
То есть, чтобы закольцевать, должен быть фиктивный элемент, при этом фиктивный элемент - элемент за последним и фикт элем->next указывает на голову списка? При этом должен ли head->prev указывать на фикт элемент?
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 12.02.2011, 00:29 | |
|
ForEveR, да, так там сделано.
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 12.02.2011, 00:33 [ТС] | |
|
volovzi, Это ответ на оба вопроса?
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 12.02.2011, 00:39 | |
|
Ага, на оба.
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 12.02.2011, 00:42 [ТС] | |
|
Можешь приблизительно показать реализацию и использование такого фиктивного элемента? А то у меня что-то совсем туго...
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|||||||||||
| 12.02.2011, 13:50 | |||||||||||
Сообщение было отмечено как решение
Решение
Если совсем приблизительно, то будет выглядеть примерно так:
Добавлено через 11 часов 36 минут Хм, я erase неправильно написал. Так будет неправильно работать. Добавлено через 43 минуты Сложность в том, что, функция «erase» удаляет узел, на который в данный момент ссылается итератор, и из-за этого итератор в дальнейшем не может быть изменён из-за того, что его узел ссылается на нули. Как это реализовано в СБШ пока не понял. Видимо, там какой-то небольшой сборщик мусора, который удаляет уже неиспользуемые узлы. Добавлено через 19 минут Придумал, как мне кажется, приемлимое решение: итератор запоминает указатели на следующий и предыдущий узлы на стадии инициализации, и поэтому удаление текущего узла на работа не сказывается:
3
|
|||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 13.02.2011, 00:59 [ТС] | |
|
volovzi, Однако действительно красиво. Попробую, спасибо
Добавлено через 34 минуты Очень сильно помогло. Спасибо! Даже с алгоритмами пашет. Прекрасно. Буду доделывать дальше. Буду спрашивать, если не смогу справится. Спасибо огромное)
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 13.02.2011, 01:06 | |
|
Да не за что, самому интересно.
Добавлено через 4 минуты Только нужно в удаления и добавлениях исправить корректировку размера списка, я там в нескольких местах забыл это сделать.
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||||||||||||
| 13.02.2011, 01:50 [ТС] | ||||||||||||||||
|
volovzi, Я пока с конструкторами занимаюсь. Ща разберусь и дальше продолжу) Спасибо огромное за помощь
Добавлено через 13 минут Не могу понять вот такой фигни... Есть два конструктора.
Добавлено через 6 минут Решилось все вот таким способом
0
|
||||||||||||||||
| 13.02.2011, 01:50 | |
|
Помогаю со студенческими работами здесь
20
Реализовать пользовательский класс "Двунаправленный список"; реализовать добавление и удаление элементов Двунаправленный список: элементы добавляются и просматриваются с конца, а удаляются с начала списка STL: реализовать кольцевой упорядоченный двусвязный список Реализовать удаление элемента из пользовательского класса "Двунаправленный список" реализовать без применения STL, абстрактные типы данных (по одной программе для каждого из типов) список, стек Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|