Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ(Суперфин).doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
404.99 Кб
Скачать

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

При выполнении данной операции в поле указателя последнего элемента исходного списка List помещается ссылка на новый вставляемый элемент EINew, а в поле ссылки вставляемого элемента помещается адрес Nil.

Фрагмент программы, реализующей данную операцию, имеет следующий вид:

New(EINew); {выделение памяти под новый элемент} ElEnd^Link := EINew; {последний элемент ссылается на новый элемент}

EINew ^. Link := Nil; {в поле ссылки вставляемого элемента

помещается адрес Nil}

6. Удаление первого элемента списка

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

ElFirst := List; {устанавливаем указатель на первый элемент

в начало списка}

List := List^.Link;{yKa3aTenb списка ссылается на следующий элемент}

Dispose(EIFirst); {удаление первого элемента и освобождение области памяти}

7. Удаление объекта, стоящего между соседними элементами списка

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

EICut := List; {устанавливаем указатель на удаляемый элементв начало списка}

while EICut^.Link<>Nil do

begin

if EICut^.Data = Priznak

then

begin

EIPred^.Link := EICut^.Link;

Disopose(EICut);

EICut := EIPred^.Link

End

else

begin

ElPred := EICut;

EICut := EICut^.Link

end

end

.8. Удаление последнего элемента списка

П ри удалении последнего элемента списка в поле ссылки предыдущего элемента заносится значение Nil, связь между последним и предпоследним элементами списка разрывается.

EIEnd := List; {устанавливаем указатель последнего элемента списка}

while EIEnd^.Link <> Nil do {пока не достигнут конец списка}

begin

ElPred := ElEnd; {перемещение предыдущего элемента

на следующую позицию}

ElEnd := ElEnd^.Link; {перемещение удаляемого элемента

на следующую позицию}

end;

ElPred^. Link := Nil; {установка предыдущего элемента последним} Dispose(EIEnd); {удаление последнего элемента}

9. Удаление всех элементов списка

При удалении списка производятся последовательное перемещение указателя начала списка на следующий элемент и удаление освободившегося элемента:

Elem := List;

while Elem <> Nil do {пока не достигнут конец списка}

begin

List := List^.Link; {перемещение начала списка на следующую

позицию}

Dispose(Elem); {удаление предыдущего элемента}

Elem := List

end;

10. Вывод на печать всех элементов списка

Содержимое списка на печать выводится посредством последовательного перемещения указателя от одного элемента к последующему и распечаткой содержимого текущего элемента:

Elem := List; {установка текущего элемента на начало списка} while Elem <> Nil do {пока не достигнут конец списка} begin

Write(Elem^.Data); {вывод текущего элемента на печать} Elem := Elem^.Link; {перемещение элемента на следующую

позицию} end;