![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
|
Предварительно установлен указатель
Исключение узла, на который предварительно установлен указатель, не требует поиска предыдущего узла (рис. 38). После исключения узла из списка и возвращения его элемента хранения в кучу, доступ к этому узлу по предварительно установленному указателю более невозможен, поэтому данному указателю следует присвоить значение NIL.

Рис. 38. Исключение узла, на который предварительно установлен указатель
| Procedure Del_Double(head: PDlist; | { head – указатель на “голову” списка } | |||
| var p: PDlist); | { p – указатель на исключаемый узел } | |||
| begin | ||||
| if (head <> nil) and (head^.next <> head) | { список не пуст и указатель p } | |||
| and (head^.prev <> head) and (p <> nil) then | { установлен? } | |||
| begin | ||||
| p^.prev^.next:=p^.next; | { изменить поле связи предыдущего узла } | |||
| p^.next^.prev:=p^.prev; | { изменить поле связи следующего узла } | |||
| dispose(p); p:=nil | { элемент хранения исключаемого узла вернуть в кучу } | |||
| end; | ||||
| end; | ||||
Операция поиска узла в двусвязном циклическом списке и операция разрушения выполняются так же, как в односвязном циклическом списке, только проход возможен в любом из двух направлений: с использованием атрибута связи next (т.е. “вперед”) или с использованием атрибута связи prev (т.е. “назад”).
Двусвязные циклические списки, как и односвязные, можно использовать для реализации разнообразных линейных структур.
Дата публикования: 2014-11-26; Прочитано: 319 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!
