Структуры и алгоритмы обработки данных. Ключарев А.А - 28 стр.

UptoLike

28
end;
var
ptrHead: PElement; {указатель на первый элемент списка}
ptrCurrent: PElement; {указатель на текущий элемент}
Операция вставки реализовывается с помощью двух процедур, ана-
логичных процедурам вставки для линейного однонаправленного спис-
ка: InsFirst_LineDubleList и Ins_LineDubleList. Однако
при вставке последующего элемента придется учитывать особенности
добавления элемента в конец списка:
procedure Ins_LineDubleList(DataElem: TypeData;
var ptrHead, ptrCurrent: PElement);
{Вставка непервого элемента в линейный двунаправленный список}
{справа от элемента, на который указывает ptrCurrent}
var
ptrAddition: PElement; {вспомогательный указатель}
begin
New(ptrAddition);
ptrAddition^.Data := DataElem;
if ptrHead = nil then begin {список пуст}
{создаем первый элемент списка}
ptrAddition^.Next := nil;
ptrAddition^.Last := nil;
ptrHead := ptrAddition;
end else begin {список не пуст}
{вставляем элемент списка справа от элемента,}
{на который указывает ptrCurrent}
if ptrCurrent^.Next <> nil then {вставляем не последний}
ptrCurrent^.Next^.Last := ptrAddition;
ptrAddition^.Next := ptrCurrent^.Next;
ptrCurrent^.Next := ptrAddition;
ptrAddition^.Last := ptrCurrent;
end;
ptrCurrent := ptrAddition;
end;
procedure InsFirst_LineDubleList(DataElem: TypeData;
var ptrHead: PElement);
{Вставка первого элемента в линейный двунаправленный список}
var
ptrAddition: PElement; {вспомогательный указатель}
begin