Однонаправленные списки

Задача.

Dispose(p).

Создать очередь из 10-ти вещественных чисел, вывести элементы на экран, предварительно их удалив.

program och;

type ukaz=^ochered;

ochered=record

inf:real;

uk:ukaz

end;

var BegUkaz, EndUkaz: ukaz;

i: byte;

ргосеdurе аdd(val: rеаl); {процедура создания и добавления

var p:ukaz; элемента в очередь}

begin

new(р);

р^.inf:= val;

р^.uk:= nil;

if EndUkaz=nil then BegUkaz:=p

else EndUkaz^.uk:=p;

EndUkaz:=p

end;

ргосеdurе del; {процедура удаления элемента из очереди }

var p:ukaz;

begin

p:= BegUkaz;

BegUkaz:=p^.uk;

if BegUkaz=nil then EndUkaz:=nil; {если удаляется последний элемент}

EndUkaz:=nil;

dispose(p)

end;

begin

BegUkaz=nil; EndUkaz:=nil; {начальные установки}

for i:=1 to 10 do add(i); {создание очереди}

while BegUkaz<>nil do {вывод элементов и их удаление}

begin

writeln(‘значение=’, BegUkaz:=p^.uk;);

del;

end

end.

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

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

Каждая компонента списка определяется ключом. Обычно ключ – либо число, либо строка символов. Ключ располагается в поле данных компоненты, он может занимать как отдельное поле записи, так и быть частью поля записи.

Основные отличия связного списка от стека и очереди следующие:

-для чтения доступна любая компонента списка;

-новые компоненты можно добавлять в любое место списка;

-при чтении компонента не удаляется из списка.

Более подробно рассмотрим работу со связанными списками на примере однонаправленного некольцевого списка.

Выделим типовые операции над списками:

· добавление звена в начало списка;

· удаление звена из начала списка;

· добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан);

· удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан);

· проверка, пуст ли список;

· очистка списка;

· печать списка.

Реализуем выделенный набор операций в виде модуля. Подключив этот модуль, можно решить большинство типовых задач на обработку списка. Пусть список объявлен так, как было описано выше. Первые четыре действия сначала реализуем отдельно, снабдив их иллюстрациями.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: