Операции со списками.
К основным операциям работы со списками относят: 1)добавление элемента в список;2)просмотр списка;3) вставка элемента;4) удаление элемента; 5) удаление всего списка.
Добавление элемента
Для списка fifo.
Создается новый элемент и он стыкуется с последним элементом списка, например делается проход по всему списку и определяется адрес последнего элемента, пусть адрес последнего элемента находиться в указателе С.
Создается новый элемент адресная часть которого в указателе F. Формируется его информационная часть, адресная часть равная nil и устанавливается связь предпоследнего элемента с созданным.
Пример текста добавления узла.
New(e);
E^.i nfo:=10;
E^.Next:=NIL;
C^.NEXT:=E;
Для списка Lifo.
Создается новый элемент адрес которого в указателе Е. формируется информационная часть. Этот элемент связывается с первым элементом и назначается 1.
Пример добавление узла в список
NEw(e);
E^.info:=10;
E^.next:=b;
B:=e;
Просмотр списка
Данная операция используеться очень часто из-за последовательного доступа к элементам списка. Она используется при поиске элементов, при преобразование информации в узлах при выводе списка и ряде других операций.
Основой этой операции является переход о одного элемента списка к другому начиная с вершины списка.
Пример вывода списка
.
Var
B,c:pn;
Begin
C:=b;
While c<>nil do
Begin
Write(c^.info);
C:=c^.next;
End;
Пример
Необходимо заменить информационную часть четвертого элемента помесив в него какое либо значение например 10.
.
.
Var
B,c:pn;
I:byte;
Begin
.
.
C:=b;
I:=1;
While (i<>4)and(c<>nil) do {c^.next<>nil- остановиться на последнем}
Begin
C:=c^.next;
Inc(i);
End;
If i=4 then c^.info:=10;
Else
Write(‘в списке менее 4-х элеменов’);
.
.
.
Обращение к элементам списка возможны путем перечисления цепочки адресных полей (используется когда строго оговорено смещение элемента в списке относительно текущего).
Пример обращение к элементам, которые следует за элементом, на который указывает указатель С.
Пример:
C^.next^.info:=50;
C^.next^.next ^.info:=100;
Вставка элемента
Позволяет добавить новый элемент между двумя существующими.
Пусть требуется добавить новый узел в список после узла на который указывает указатель С.
Для решения этой задачи необходимо:
1.выделить место в памяти для нового узла, пусть адрес этого узла расположен в указателе Е.
2.связать новый узел с узлом следующим за С.
3.связать узел на который указывает С с созданным узлом.
4.заполнить информационную часть узла.
Для выполнения отмеченных действий необходимо выполнить следующую последовательность операторов:
New(e);
E^.next:=c^.next;
C^.next:=e;
E^.infj:=x;