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

Двусвязный список

Описание:

TYPE

DList=^NODE;

Node=record

Info:Integer;

Prev,Next:DList;

End;

Узел двусвязного списка содержит одно или несколько информационных полей и поля-ссылки на предшествующий (Prev) и следующий (Next) узлы. Первый узел не имеет предыдущего узла, последний – следующего за ним (значения nil).

В кольцевом списке эти ссылки замыкаются (за последним узлом следует первый узел списка, а первому предшествует последний, см. далее).

  • ЗАДАНИЕ 3.

рис. 13 Двусвязный список (фрагмент)

Введем следующие обозначения (см. рис. 13):

Q – ссылка на узел двусвязного списка.

L - ссылка на узел, предшествующий Q^

R - ссылка на узел, следующий за Q^

Докажите истинность равенства Q^.Prev^.Next=Q^.Next^.Prev

  • ДОБАВЛЕНИЕ УЗЛА В ДВУСВЯЗНЫЙ СПИСОК

В текст процедуры добавления узла в односвязный список (см. выше) добавляются операторы, устанавливающие ссылки prev на предыдущие узлы.

Возможны три случая:

A. Добавляемый узел находится между двумя узлами списка (L<>Nil, R<>Nil). Добавление узла Q^ между узлами L^ и R^ см. на рис.14;

B. Узел добавляется в начало списка (L=Nil, R<>Nil);

C. Узел добавляется в конец списка (L<>Nil, R=Nil).

Рис.14. Добавление узла

Действие

Случаи

Оператор(ы)

  1. Найти узел L^ (и/или R^)

A, B, C

-------------

  1. Создать новый узел Q^

A, B, C

  1. Заполнить информационное поле узла Q^

A, B, C

  1. Связать узел Q^ с предыдущим узлом (L^)

A, B, C

  1. Связать узел Q^ со следующим узлом (R^)

A, B, C

  1. Связать узел L^ с узлом Q^ (Q^ следует за L^)

A, C

  1. Связать узел R^ с узлом Q^ (Q^ предшествует R^)

A, B

  1. При добавлении в начало списка: перенести указатель начала списка на узел Q^

B

  • Примечание: Если ссылка L (R) ссылается на nil, ее разыменование в операторе 6 (7) не допускается.

  • ЗАДАНИЕ 4. Заполните свободные поля таблицы соответствующими операторами и напишите процедуру добавления узла в двусвязный список (порядок действий схематически показан на рис.14).

  • УДАЛЕНИЕ УЗЛА ИЗ ДВУСВЯЗНОГО СПИСКА

При удалении узла Q^ из двусвязного списка также выделим 3 случая:

A. Узел Q^ располагается между узлами L^ и R^ (L<>nil, R<>nil, рис. 15).

B. Удаляется первый узел списка (Q=HEAD, L=Nil).

C. Удаляется последний узел списка (R=Nil).

рис.15. Удаление узла

Рассмотрим удаление узла двусвязного списка для случая A:

Действие

Оператор(ы)

  1. Найти удаляемый узел Q^ (по номеру или значению) и установить ссылки на узлы L^ и R^

  1. Установить ссылку из узла L^ на узел R^

  1. Установить ссылку из узла R^ на узел L^

  1. Удалить узел Q^

  • ВОПРОС. Какие действия, указанные в таблице, не должны выполняться в случае B (L=nil) и в случае C (R=nil)?

  • ЗАДАНИЕ 5. Заполните свободные поля таблицы соответствующими операторами и напишите процедуру удаления узла из двусвязного списка.