Связанные списки используются во многих алгоритмах и вы будете встречать

Связанные списки используются во многих алгоритмах, и вы будете встречать-
ся с ними на протяжении всей книги. В следующих разделах рассматривается
несколько специальных разновидностей связанных списков.

Циклические связанные списки

Вместо того, чтобы устанавливать поле Next Се 11 последнего элемента спис-
ка в nil, нужно сделать так, чтобы оно указывало на первый элемент списка, об-
разуя циклический список (circular list), как показано на рис. 2.7.


Рис. 2.7. Циклический связанный список

Циклические списки используются, когда нужно обходить набор элементов
в бесконечном цикле. На каждом шаге цикла программа просто перемещает указа-
тель на следующую ячейку списка. Допустим, имеется циклический список элемен-
тов, содержащих названия дней недели. В этом случае программа может перечис-
лять дни месяца, используя следующий код:

// Формирование списка и т.д.
// Печать календаря для какого-нибудь месяца.
// first_day указывает на ячейку первого дня месяца.
// num_days - это количество дней месяца.
procedure ListMonth(first_day : PDayCell; num_days : Integer);
var
ptr : PDayCell;
i : Integer;
begin
ptr := first_day;
for i := 1 to num_days do
begin
PrintEntry(Format('%d:%s',[i,ptr^.Value]));
Ptr := ptr^.NextCell;
end;
end;

Циклические списки также позволяют получить доступ ко всему списку, начи-
ная с любой позиции. Это придает списку некоторую симметрию. Программа мо-
жет работать со всеми элементами списка одинаково.
procedure ShowList(start_cell : PListCell);'
var
ptr : PListCell;
begin
ptr := start_cell;
repeat
ShowMessage(ptrA.Value);
Ptr := ptr^.NextCell;
until (ptr=start_cell);
end;

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: