Составители:
32
ptrAddition^.Data := DataElem;
if ptrHead = nil then begin {список пуст}
{создаем первый элемент списка}
ptrAddition^.Next := ptrAddition; {цикл из 1 элемента}
ptrHead := ptrAddition;
end else begin {список не пуст}
{вставляем элемент списка справа от элемента,}
{на который указывает ptrCurrent}
ptrAddition^.Next := ptrCurrent^.Next;
ptrCurrent^.Next := ptrAddition;
end;
ptrCurrent := ptrAddition;
end;
Порядок следования операторов присваивания процедуры очень ва-
жен. При неправильном переопределении указателей возможен разрыв
списка или потери указателя на первый элемент, что приводит к потере
доступа к части или всему списку.
Операция просмотра списка заключается в последовательном про-
смотре всех элементов списка. В отличие от линейного однонаправлен-
ного списка здесь признаком окончания просмотра списка будет воз-
врат к элементу, выделенным как «первый»:
procedure Scan_CicleSingleList(ptrHead: PElement);
{Просмотр циклического однонаправленного списка}
var
ptrAddition: PElement; {вспомогательный указатель}
begin
if ptrHead <> nil do begin {список не пуст}
ptrAddition := ptrHead;
repeat
writeln(ptrAddition^.Data); {Вывод значения элемента}
ptrAddition := ptrAddition^.Next;
until ptrAddition = ptrHead;
end;
end;
Операция поиска элемента в списке заключается в последователь-
ном просмотре всех элементов списка до тех пор, пока текущий эле-
мент не будет содержать заданное значение или пока не достигнут «пер-
вый» элемент списка. В последнем случае фиксируется отсутствие ис-
Страницы
- « первая
- ‹ предыдущая
- …
- 30
- 31
- 32
- 33
- 34
- …
- следующая ›
- последняя »