Составители:
29
New(ptrAddition);
ptrAddition^.Data := DataElem;
ptrAddition^.Last := nil;
if ptrHead = nil then begin {список пуст}
{создаем первый элемент списка}
ptrAddition^.Next := nil;
end else begin {список не пуст}
{вставляем новый элемент слева (перед) первым элементом}
ptrAddition^.Next := ptrHead;
ptrHead^.Last := ptrAddition;
end;
ptrHead := ptrAddition;
end;
Порядок следования операторов присваивания обеих процедур здесь
также очень важен. При неправильном переопределении указателей
возможен разрыв списка или потери указателя на первый элемент, что
приводит к потере доступа к части или всему списку.
Операция просмотра и операция поиска для линейного двунаправ-
ленного списка реализуются абсолютно аналогично соответствующим
процедурам для линейного однонаправленного списка, и приводить их
не будем. Отметим только, что просматривать и искать здесь можно в
обоих направлениях.
Операция удаления элемента также осуществляется во многом ана-
логично удалению из линейного однонаправленного списка:
procedure Del_LineDubleList(var ptrHead,
ptrCurrent: PElement);
{Удаление элемента из линейного двунаправленного списка}
var
ptrAddition: PElement; {вспомогательный указатель}
begin
if ptrCurrent <> nil then begin {входной параметр корректен}
if ptrCurrent = ptrHead then begin {удаляем первый}
ptrHead := ptrHead^.Next;
dispose(ptrCurrent);
ptrHead^.Last := nil;
ptrCurrent := ptrHead;
end else begin {удаляем непервый}
if ptrCurrent^.Next = nil then begin {удаляем последний}
ptrCurrent^.Last^.Next := nil;
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »