Пример 6. Процедура удаления звена из списка


Пример 5. Процедура вывода элементов списка на экран

Пример 4. Процедура формирования списка натуральных чисел вводимых с клавиатуры.

Основные операции со списком.

1. Формирование списка

2. Вывод содержимого (просмотр элементов) списка на экран

3. Удаление звена из списка

4. Включение звена в список

5. Поиск элемента в списке

 

Чтобы оперировать с элементами списка единообразно и просто, полезно ввести в употребление заглавное звено список. Информационную часть заглавного звена можно не использовать или использовать для побочных целей, например, для хранения величины – количества звеньев списка. Ссылочная часть заглавного звена содержит ссылку на первое звено списка, таким образом, у каждого звена списка будет “предыдущее” звено.

 

Ввод числа 0 означает окончание формирования списка. Пусть u и p – имена ссылок на заглавный и текущий звенья списка.

Алгоритм:

Сначала выделяем место в памяти для заглавного звена New(u), текущая ссылка - р вначале указывает на заглавное звено;

Далее, если вводится число неравное нулю, то с помощью ссылки p^.sled формируется очередное звено списка, и текущий указатель р переводится на это звено

 

Procedure form;

var s:integer;

Begin

New(u); p:=u; u^.sled:=nil; Writeln(‘введите список натуральных чисел, окончание ввода - 0’);

Readln(s);

While s<>0 do

begin new (p^.sled);p:=p^.sled; p^.inf:=s; p^.sled:=nil;

readln(s);

end; writeln

End;

 

Алгоритм:

Текущую ссылку р связываем с первым звеном списка (u^.sled -имя указателя на первое звено);

Затем связываемся со вторым звеном, изменив значение р на значение p^.sled, и продолжаем цикл просмотра элементов списка, пока выполняется условие p<>nil. Если список был пустым (было выполнено отношение p=nil), то тело цикла не выполнится ни разу и не будет выведено ни одного числа.

 

Procedure print;

Var p:ss;

Begin p:=u^.sled;

While p<>nil do

begin write (p^.inf, ‘ ‘);

P:=p^.sled;

end; writeln;

End;

 

Напишем процедуру, удаляющею звено из списка с помощью ссылки р на звено, за которым следует удаляемое звено.

Операция удаления звена из списка требует изменения лишь одной ссылки, что геометрически выглядит как изменение одной стрелки:

Список до удаления звена с элементом с