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

UptoLike

26
танавливается на предшествующий элемент списка, или на новое
начало списка, если удаляется первый.
Алгоритмы удаления первого и непервого элементов списка отлича-
ются друг от друга. Поэтому в процедуре, реализующую данную опера-
цию, осуществляется проверка, какой элемент удаляется, и далее реа-
лизуется соответствующий алгоритм удаления:
procedure Del_LineSingleList(var ptrHead,
ptrCurrent: PElement);
{Удаление элемента из линейного однонаправленного списка}
var
ptrAddition: PElement; {вспомогательный указатель}
begin
if ptrCurrent <> nil then begin {вх.параметр корректен}
if ptrCurrent = ptrHead then begin {удаляем первый}
ptrHead := ptrHead^.Next;
dispose(ptrCurrent);
ptrCurrent := ptrHead;
end else begin {удаляем непервый}
{устанавливаем вспомогательный указатель на элемент,
предшествующий удаляемому}
ptrAddition := ptrHead;
while ptrAddition^.Next <> ptrCurrent do
ptrAddition := ptrAddition^.Next;
{непосредственное удаление элемента}
ptrAddition^.Next := ptrCurrent^.Next;
dispose(ptrCurrent);
ptrCurrent := ptrAddition;
end;
end;
end;
Линейный однонаправленный список имеет только один указатель в
элементах. Это позволяет минимизировать расход памяти на организа-
цию такого списка. Одновременно, это позволяет осуществлять перехо-
ды между элементами только в одном направлении, что зачастую уве-
личивает время, затрачиваемое на обработку списка. Например, для
перехода к предыдущему элементу необходимо осуществить просмотр
списка с начала до элемента, указатель которого установлен на теку-
щий элемент.