Курсовая работа: Ссылочные типы. Динамические переменные

while ( CurrAssoc <> nil ) and not IsFounded do begin

if NewElem^.Elem > CurrAssoc^.Elem then begin

{перейти к следующему элементу}

PredAssoc:= CurrAssoc;

CurrAssoc:= CurrAssoc^.NextElem

end

else IsFounded:= True

end;

{позиция вставки нового элемента найдена}

if PredAssoc= nil then begin

{вставка нового элемента в начало списка}

NewElem^.NextElem:= HeadOfStr;

HeadOfStr:= NewElem

end;

if ( PredAssoc <> nil ) and ( CurrAssoc <> nil ) then begin

{вставка элемента между элементами, на которые указывают ссылки PredAssoc

CurrAssoc}

NewElem^.NextElem:= PredAssoc^.NextElem;

PredAssoc^.NextElem:= NewElem

end;

if ( PredAssoc <> nil ) and ( CurrAssoc= nil ) then begin

{вставкавконецсписка}

PredAssoc^.NextElem:= NewElem;

NewElem^.NextElem:= nil

end

end;

2.2 Двунаправленные списки

Линейный список неудобен тем, что при попытке вставить некоторый элемент перед текущим элементом, требуется обойти почти весь список, начиная с заголовка, чтобы изменить значение указателя в предыдущем элементе списка. Чтобы устранить данный недостаток вводится второй указатель в каждом элементе списка. Первый указатель связывает данный элемент со следующим, а второй √ с предыдущим. Такая организация динамической структуры данных получила название линейного двунаправленного списка (двусвязного списка). На рис. 2 приведена графическая интерпретация двунаправленного списка.

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

К-во Просмотров: 589
Бесплатно скачать Курсовая работа: Ссылочные типы. Динамические переменные