![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 03.03.2013
Сообщений: 10
|
![]()
Нужно создать кольцевой двунаправленный список и удалить два последних элемента. Выбивает ошибку, что переменная не является записью или объектом, помогите исправить ошибку
Код:
|
![]() |
![]() |
![]() |
#2 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
![]()
Катя Миронова,
1) хотелось бы видеть полный код программы, т.к. процедуру VSTAV я не нашёл, а она вызывается. 2) в коде, приведённом выше, реализован обычный список, а не кольцевой и не двунаправленный. 3) описана процедура VUDAL, а вызываете VYDAL 4) MIL вместо nil... Вы код взяли из книжки и распознали в FineReader-e? |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() |
![]() |
![]() |
![]() |
#4 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
![]()
s-andriano, кхе-кхе :-)
![]() Разновидностью связных списков является кольцевой (циклический, замкнутый) список. Он тоже может быть односвязным или двусвязным. Последний элемент кольцевого списка содержит указатель на первый, а первый (в случае двусвязного списка) — на последний. ссылка У этого списка есть первый и последний элемент по определению. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
И как искать у кольцевого списка эти начало и конец?
|
![]() |
![]() |
![]() |
#6 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
![]()
На рисунке как раз нарисовано (верхняя левая стрелка), отдельно храним указатель на начало (пусть будет HEAD).
А конец находим просто. Переходим по указателю HEAD к элементу списка, затем: если список двунаправленный, бежим к предыдущему; если список обычный (односвязный), пробегаем список до тех пор, пока адрес следующего не равен HEAD, тогда текущий и будет концом. |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Минуточку.
HEAD в кольцевом списке хранит не начало, а текущий элемент. Это далеко не одно и то же. Пусть у нас есть список. Предположим, что у списка есть начало. Раз оно есть, оно где-то расположено и в нем записано вполне определенное значение. Прокрутим список на несколько элементов в любую сторону. Ответьте на вопрос: это тот же самый список или другой? Если тот же самый, то и начало у него должно быть то же самое. Если другой, то как он, - с теми же самыми элементами и с тем же самым размещением в памяти, а также привязанный к тому же самому HEAD, вдруг стал другим? То, что Вы назвали определением, на самом деле не определение, а пояснение, как создавать такой список, и в качестве строгого определения, из которого можно получать строгие следствия (типа существования начала и конца), использовано быть не может. Начало и конец у него были в процессе построения, пока мы не замкнули его в кольцо. После замыкания в кольцо они исчезли. Как исчезла необходимость отдельно хранить "начало", отдельно - "бегунок". |
![]() |
![]() |
![]() |
#8 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
![]()
>Ответьте на вопрос: это тот же самый список или другой?
>Если тот же самый, то и начало у него должно быть то же самое. Тот же самый. Начало тоже самое. Верно, я ссылаюсь на определение "список", а написал лишь пояснение. По логике в списке начало и конец определяются по ходу добавления и удаления элементов. Ну а по связности и сути - да, у кольца нет ни начала, ни конца. |
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Тогда вернемся к исходному вопросу: Был список, предположим, у него есть определенное начало, его немножко покрутили (на сколько элементов - неизвестно), как найти это начало? |
|
![]() |
![]() |
![]() |
#10 | |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Добавление своих объектов в Добавление своих объектов в двунаправленный кольцевой список | voidmain | C# (си шарп) | 3 | 21.03.2013 13:08 |
кольцевой двунаправленный список на паскале | gerda_best92 | Помощь студентам | 4 | 21.06.2011 19:50 |
Кольцевой двунаправленный список. ООП. | Purr | Помощь студентам | 5 | 30.11.2010 08:48 |
Паскаль,Кольцевой двунаправленый список | enigma22 | Помощь студентам | 2 | 17.06.2010 01:47 |
Реализовать кольцевой двунаправленный список | s20 | Помощь студентам | 3 | 19.10.2009 16:58 |