|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.06.2017, 15:39 | #1 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
[Pascal] сформировать двунаправленный кольцевой список с заголовком, код в теме
Объявлена структура такая
Код:
Сделал функцию которая добавляет элементы списка сначала сам Код:
Код:
проверил командой пока текущий элемент не равен заголовку ( pTemp <> pFirst) выводить на экран элементы в обоих случаях одно и тоже. |
21.06.2017, 16:15 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
добавляет куда - в начало списка, в конец?
код приведён куском, он не полный. начиная с того, что не видно, что pNew - это указатель на выделенную область памяти (но об этом можно догадаться) и заканчивая тем, что такое pTemp (предполагаю, что это указатель на "хвост" / последний элемент списка. ну и не вижу проверки на пустой список (добавление элемента в пустой список отличается от добавления в не пустой). выложите свой код полностью, будет повод для разговора. |
21.06.2017, 16:28 | #3 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Добавляет в конец списка, список сам динамический двунаправленный с заголовком(это важно)
да pTemp указатель на хвост списка, если список пустой он указывает на заголовок pFirst указатель только на заголовок. В списке с заголовком поле next заголовка указывает на след элемент то есть на 1 элемент списка, поле prev на последний элемент списка, если их нету то они указывают на сам заголовок последний элемент списка в поле next указывает на заголовок, получается кольцевой список Последний раз редактировалось goto ∞; 21.06.2017 в 16:32. |
21.06.2017, 16:34 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
тогда вот это:
полная чушь. а проверить, правильный ли Вы код написали - очень легко. заполните список из нескольких элементов (5 штук вполне достаточно), выведите список на экран (желательно в прямом порядке (от головы к хвосту) и в обратном - от хвосты к голове - двухнаправленный список это элементерно позволяет. Если всё правильно - значит, Вы написали верную программу. если нет - значит, ищите косяки. p.s. а ваш код я так и не увидел. p.p.s. на форуме неоднократно выкладывался рабочий код на Паскале по работе с двухнаправленными списками. |
21.06.2017, 16:40 | #5 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
21.06.2017, 16:46 | #6 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
|
21.06.2017, 17:04 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
да, приношу свои извинения.
последний элемент (pTemp^ ) в поле next указывает на головной элемент. поэтому pTemp^.next равен pFirst это одно и то же. ну и раз мы присвоили pNew^.next := pFirst тогда pNew^.next^.prev := pNew; это тоже самое, что pFirst^.prev := pNew |
21.06.2017, 17:09 | #8 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Ок, спасибо всем
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
кольцевой двунаправленный список( Паскаль) | Катя Миронова | Помощь студентам | 9 | 07.06.2013 20:28 |
кольцевой двунаправленный список на паскале | gerda_best92 | Помощь студентам | 4 | 21.06.2011 19:50 |
Кольцевой двунаправленный список. ООП. | Purr | Помощь студентам | 5 | 30.11.2010 08:48 |
Реализовать кольцевой двунаправленный список | s20 | Помощь студентам | 3 | 19.10.2009 16:58 |