Составители:
34
var
ptrAddition: PElement; {дополнительный указатель}
begin
if ptrCurrent <> nil then begin {входной параметр корректен}
if ptrHead^.Next <> ptrHead then begin
{Если удаляемый элемент не единственный в списке}
{устанавливаем вспомогательный указатель на элемент,
предшествующий удаляемому}
ptrAddition := ptrHead;
while ptrAddition^.Next <> ptrCurrent do
ptrAddition := ptrAddition^.Next;
{непосредственное удаление элемента}
ptrAddition^.Next := ptrCurrent^.Next;
if ptrHead = ptrCurrent then {удаляем первый}
ptrHead := ptrCurrent^.Next;
dispose(ptrCurrent);
ptrCurrent := ptrAddition^.Next;
end else begin
ptrHead:=nil;
dispose(ptrCurrent);
ptrCurrent:=nil;
end;
end;
end;
Циклический однонаправленный список, так же как и линейный
однонаправленный список, имеет только один указатель в элемен-
тах, что позволяет минимизировать расход памяти на организацию
списка, но обеспечивает переходы между элементами только в одном
направлении. Одновременно здесь упрощены операции вставки и
удаления элементов.
Для ускорения доступа к элементам списка путем применения пере-
ходов между элементами в обоих направлениях в циклических списках
применяют тот же подход, что и в линейных списках: циклический дву-
направленный список.
1.2.7.2. Циклический двунаправленный список
В этом циклическом списке любой элемент имеет два указателя, один
из которых указывает на следующий элемент в списке, а второй указы-
вает на предыдущий элемент (рис. 5).
Страницы
- « первая
- ‹ предыдущая
- …
- 32
- 33
- 34
- 35
- 36
- …
- следующая ›
- последняя »