Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi_списки2_методика.DOC
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
292.86 Кб
Скачать

Var temp:pTelem;

begin

current:=L.first; {ставим служебный указатель current

на первый узел списка}

if L.count<>0 then {если число узлов списка не равно

нулю, тогда начинаем итерационный

процесс удаления этих узлов}

repeat

temp:=current; {ставим вспомогательный указатель

temp на текущий (первый) узел,

заимствуя адрес у указателя current }

current:=current^.next;{перемещаем указатель current

с текущего (первого) узла на следующий (второй) узел}

temp^.Next:=nil; {обрываем связь между текущим

(первым) и следующим (вторым) узлом по указателю next}

temp^.prev:=nil; {обрываем связь между текущим

(первым) и предыдущим узлом по указателю prev

(при удалении первого узла списка этот оператор можно

не выполнять) }

dispose(temp); {удаляем узел на который указывает

указатель temp (первый узел)}

until current=nil; {цикл работает до тех пор пока,

перемещаясь по списку, указатель current не достигнет

последнего узла, который не удаляется}

dispose(current); {удаляем последний узел спика}

Tlist_Init; { инициализируем (освобождаем) указатели

First , Last и счетчик Count}

end;

Вывод содержимого информационных полей списка (прямая и обратная печать)

Вывод содержимого информационных полей списка (или печать списка) является частным случаем алгоритма обхода списка, основная идея которого заключается в переходе от узла к узлу списка согласно ссылкам, записанным в узлах. Для этой цели в процедуре прямой печати (от “головы” списка) PrintFirst организован цикл для переме-щения указателя current по узлам списка, начиная с первого. Внутри этого цикла присут-ствует оператор(mem.Add) для вывода содержимого информационных полей текущего узла в окно компонента memo1 через свойство lines:

procedure PrintFirst(mem:TStrings);

begin

current:=L.first; {ставим служебный указатель current

на первый узел списка}

if L.count<>0 then

repeat

mem.Add(current^.down.M+' '+current^.down.N+'

'+current^.down.W);

current:=current^.next; {перемещаем указатель current

с текущего узла на следующий}

until current=nil

else

end;

Процедура обратной печати PrintLast аналогична по-своему алгоритму процедуре прямой печати PrintFirst с той лишь разницей, что начальное положение указателя current находится на последнем узле списка и он перемещается в перед к началу списка.

procedure PrintLast(mem:TStrings);

begin

current:=L.Last; {ставим служебный указатель current

на последний узел списка}

if L.count<>0 then

repeat

mem.Add(current^.down.M+' '+current^.down.N+

' '+current^.down.W);

current:=current^.prev; {перемещаем указатель

current с текущего узла на предыдущий}

until current=nil

else

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]