Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Кольцевые двусвязные списки

Автор: User88 6.01.2007 18:24

Здравствуйте, смотрел FAQ и набирал в поиске, но не нашел алгоритмов организации и реализации основных операций над кольцевыми двусвязными списками, может быть у кого-нибудь найдется этот материал, а то все никак не разберусь, заранее спасибо.

Автор: volvo 6.01.2007 19:10

Что именно тебе не понятно? Как организуются кольцевые списки? Как делать проход по такому списку? ЧТО?

Все почти аналогично обычному линейному списку, за исключением одной маленькой детали...

Автор: User88 6.01.2007 19:27

Да, как они организуются(именно двусвязные кольцевые): добавление первого и последующих элементов, ну и удаление элементов из такого списка.

Автор: мисс_граффити 6.01.2007 21:54

двусвязный НЕкольцевой (линейный) понимаешь, как делается?
то есть в FAQ он есть... но ты - понимаешь?
если да, остается два указателя поменять: с первого элемента должен идти на последний, а с последнего - на первый (а в линейном там nil).

Автор: User88 7.01.2007 1:43

То есть процедура добавления элемента в список должна выглядеть так?

Procedure Add(X : Telem; Var L : TList);
Var P : TList;
L1:Tlist;
Begin
if L=nil then
begin
L:=New(TList);
L^.Next:=L;
L^.Prev:=L;
L^.Data:=X;
end else
begin
P:=New(TList);
P^.Data:=X;
P^.Next:=L^.Next;
L^.Next^.Prev:=P;
P^.Prev:=L;
L^.Next:=P;
end;
End;


М
Теги не забываем...
мисс_граффити


Автор: volvo 7.01.2007 2:10

не совсем... Ты запутался, по-моему, с указателями... Вот так:

Procedure Add(X : Telem; Var L : TList);
Var
P : TList;
Begin
if L=nil then begin
L:=New(TList);
L^.Next:=L;
L^.Prev:=L;
L^.Data:=X;
end
else begin
P:=New(TList);
P^.Data:=X;
P^.prev := L^.prev; { <--- Предыдущее для вновь добавленного значения }
P^.next := L; { <--- Следующее для вновь добавленного - всегда начало списка }
L^.prev^.next := P; { <--- Обновляем "бывший" последний элемент }
L^.prev := P; { <--- Предыдущий для первого элемента }
end;
End;

Автор: User88 7.01.2007 14:32

Понял, спасибо!