Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Предварительно установлен указатель
Исключение узла, на который предварительно установлен указатель, не требует поиска предыдущего узла (рис. 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; Прочитано: 272 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!