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

Добавление элемента

Для списка 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;

Удаление узла из существующего списка.

Обычно удаление из списка связывается с перенаправлением связи к удаленному узлу, чтобы закрыть доступ к нему.

Удаление узла следующего за текущим.

Пусть указатель С указывает на какой либо элемент списка и требуется удалить элемент следующий за ним. Для решения этой задачи необходимо в поле next узла, на который указывает С, поместить содержимое поля next удаляемого узла, после этого связь с удаляемым узлом теряется.

C^.next:=c^.next.^next;

В данном случае нарушена только связь с узлом при этом в динамической памяти узел остался и занимает память узел остался и занимает память, для того чтобы удалить это элемент из ДП необходимо.

Сохранить адрес удаляемого узла.

Нарушить связь с удаляемым узлом.

Выполнить dispose с сохраненным адресом.

Пример удаления узла.

Var

Tmp:pn;

.

.

Tmp:=C^.next;

C^.next:=c^.next^.next;

Dispose(tmp);