|
11.02.2011, 20:37
|
|||||
Реализовать двунаправленный список в духе списка из STL11.02.2011, 20:37. Показов 7595. Ответов 44
Метки нет (Все метки)
Все-таки видимо у меня всегда останутся с этим проблемы.
Само определение скидывать не буду, я пытаюсь сделать, что-то вроде STL-ного списка. Спросить хочу только одно.
Хотя вообще как я понял это для однонаправленного только катит... А вот как сделать для двунаправленного - второй день догнать не могу.
0
|
||||||
11.02.2011, 20:37
|
||
|
Ответы с готовыми решениями:
44
Двунаправленный список. Отрицательные элементы списка перенести в начало списка Двунаправленный список - реализовать работу с данными о ПК |
|
11.02.2011, 20:53
|
|||||
|
Ну так вы перед тем, как tail'у присваивать tmp, установите в tmp prev-указатель на tail.
Добавлено через 2 минуты Т.е. так:
1
|
||||||
|
11.02.2011, 20:56
|
||
|
silent_1991, Офигеть... столько проколебался а все так просто... шок)
0
|
|||
|
11.02.2011, 20:56
|
|||||
|
Ссылки на предыдущий элемент нет, потому что ты её не устанавливаешь.
Опоздал...
1
|
||||||
|
11.02.2011, 21:01
|
||
|
ForEveR, когда списки пишешь - очень удобно на бумажке рисовать квадратики и стрелочки, соответствующие установке связок в алгоритме. Вот так нарисовал стрелочки и увидел, что одной не хватает - сразу понятно, что надо добавить. Попробуйте)))
Не по теме: С "Ну так вы перед..." как-то грубовато вышло, извиняюсь)))
0
|
|||
|
11.02.2011, 22:21
|
|||||
|
Ниже код. Есть несколько вопросов.
Не могу понять как сделать push_back/front через итераторы. Не получается. Хотелось бы увидеть простой пример на одну из данных функций. функция back() - выдает ошибку, ибо end() у меня указывает на элемент за последним, то есть tail->next. Так как tail->next == 0 то --end() не выходит, ибо curr=curr->prev где curr == tail->next, вследствие чего - ошибка. Как исправить? Ну и плоховато дело с erase. Буду благодарен за помощь.
0
|
||||||
|
11.02.2011, 23:47
|
||
|
ForEveR, если я не ошибаюсь, std::list является кольцевым двусвязным списком, и при этом даже когда он пуст, в нём присутствуют два элемента — начало и конец. А новые элементы при добавлении встраиваются между ними. Таким образом решается проблема с итераторами.
1
|
|||
|
11.02.2011, 23:55
|
||
|
volovzi, Не очень хочется делать список кольцевым... Есть какая-то другая возможность, без переделывания списка?
0
|
|||
|
12.02.2011, 00:00
|
||
|
Точно не скажу, но список в стл всё-таки по-моему не кольцевой. А то, что все его элементы вставляются между start (первым элементом) и end (фиктивным элементом, следующим за последним) - это да. Собственно, я и не понимаю, как список с такими параметрами может быть кольцевым (когда есть чёткое начало и, хоть и фиктивный, но всё же конец).
1
|
|||
|
12.02.2011, 00:01
|
|||||
|
ForEveR, как сделать без зацикливания так сходу не соображу, надо подумать.
Добавлено через 1 минуту Вот цитата из СБШ:
2
|
||||||
|
12.02.2011, 00:03
|
||
|
0
|
|||
|
12.02.2011, 00:28
|
||
|
То есть, чтобы закольцевать, должен быть фиктивный элемент, при этом фиктивный элемент - элемент за последним и фикт элем->next указывает на голову списка? При этом должен ли head->prev указывать на фикт элемент?
0
|
|||
|
12.02.2011, 00:29
|
||
|
ForEveR, да, так там сделано.
1
|
|||
|
12.02.2011, 00:33
|
||
|
volovzi, Это ответ на оба вопроса?
0
|
|||
|
12.02.2011, 00:39
|
||
|
Ага, на оба.
1
|
|||
|
12.02.2011, 00:42
|
||
|
Можешь приблизительно показать реализацию и использование такого фиктивного элемента? А то у меня что-то совсем туго...
0
|
|||
|
12.02.2011, 13:50
|
||||||||||
Сообщение было отмечено как решение
Решение
Если совсем приблизительно, то будет выглядеть примерно так:
Добавлено через 11 часов 36 минут Хм, я erase неправильно написал. Так будет неправильно работать. Добавлено через 43 минуты Сложность в том, что, функция «erase» удаляет узел, на который в данный момент ссылается итератор, и из-за этого итератор в дальнейшем не может быть изменён из-за того, что его узел ссылается на нули. Как это реализовано в СБШ пока не понял. Видимо, там какой-то небольшой сборщик мусора, который удаляет уже неиспользуемые узлы. Добавлено через 19 минут Придумал, как мне кажется, приемлимое решение: итератор запоминает указатели на следующий и предыдущий узлы на стадии инициализации, и поэтому удаление текущего узла на работа не сказывается:
3
|
|||||||||||
|
13.02.2011, 00:59
|
||
|
volovzi, Однако действительно красиво. Попробую, спасибо
Добавлено через 34 минуты Очень сильно помогло. Спасибо! Даже с алгоритмами пашет. Прекрасно. Буду доделывать дальше. Буду спрашивать, если не смогу справится. Спасибо огромное)
0
|
|||
|
13.02.2011, 01:06
|
||
|
Да не за что, самому интересно.
Добавлено через 4 минуты Только нужно в удаления и добавлениях исправить корректировку размера списка, я там в нескольких местах забыл это сделать.
1
|
|||
|
13.02.2011, 01:50
|
|||||||||||||||
|
volovzi, Я пока с конструкторами занимаюсь. Ща разберусь и дальше продолжу) Спасибо огромное за помощь
Добавлено через 13 минут Не могу понять вот такой фигни... Есть два конструктора.
Добавлено через 6 минут Решилось все вот таким способом
0
|
||||||||||||||||
|
13.02.2011, 01:50
|
|
|
Реализовать пользовательский класс "Двунаправленный список"; реализовать добавление и удаление элементов Двунаправленный список: элементы добавляются и просматриваются с конца, а удаляются с начала списка STL: реализовать кольцевой упорядоченный двусвязный список Реализовать удаление элемента из пользовательского класса "Двунаправленный список" реализовать без применения STL, абстрактные типы данных (по одной программе для каждого из типов) список, стек Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|