ВУЗ:
Составители:
Рубрика:
- 20 -
должна учитываться при реализации операций (например, вставки, удаления)
для двунаправленных списков. Ещё один вариант реализации списков в виде
динамических цепочек – так называемые списки с заглавным звеном –
рассматривается в следующем подразделе.
Списки с заглавным звеном
Если в начало обычного однонаправленного списка добавить
дополнительное звено, не содержащее элемента (т.е. поле elem в этом звене не
определено), то получим список с заглавным звеном. Пример:
Для таких списков некоторые алгоритмы обработки записываются
проще, так как в списке всегда есть хотя бы одно звено (даже если он пуст).
Пусть надо реализовать операцию вставки в конец списка L элемента х.
Сравним решения для списка без заглавного звена и для списка с заглавным
звеном:
procedure insert1(var L: list; x: elemtype);
{ вставляет в конец списка L без заглавного звена
элемент x}
var p,q: link;
begin
new(q); q↑.elem:= x; q↑.next:= nil;
{q указывает на созданное для вставляемого элемента
звено }
if L = nil then L:= q {случай пустого списка
обрабатывается отдельно}
else
begin p:= L;
while p↑.next< > nil do p:= p↑.next;
{p указывает на последнее звено в списке}
p↑.next:= q
{присоединили в конец списка новое звено}
end
end; {insert1}
procedure insert2(L: list; x: elemtype);
{ вставляет в конец списка L с заглавным звеном
элемент x}
var p,q : link;
begin
new(q); q↑.elem := x; q↑.next:= nil; p:= L;
while p↑.next< > nil do p:= p↑.next;
{p указывает на последнее звено в списке}
L
'a'
'b'
nil
должна учитываться при реализации операций (например, вставки, удаления) для двунаправленных списков. Ещё один вариант реализации списков в виде динамических цепочек – так называемые списки с заглавным звеном – рассматривается в следующем подразделе. Списки с заглавным звеном Если в начало обычного однонаправленного списка добавить дополнительное звено, не содержащее элемента (т.е. поле elem в этом звене не определено), то получим список с заглавным звеном. Пример: 'b' nil L 'a' Для таких списков некоторые алгоритмы обработки записываются проще, так как в списке всегда есть хотя бы одно звено (даже если он пуст). Пусть надо реализовать операцию вставки в конец списка L элемента х. Сравним решения для списка без заглавного звена и для списка с заглавным звеном: procedure insert1(var L: list; x: elemtype); { вставляет в конец списка L без заглавного звена элемент x} var p,q: link; begin new(q); q↑.elem:= x; q↑.next:= nil; {q указывает на созданное для вставляемого элемента звено } if L = nil then L:= q {случай пустого списка обрабатывается отдельно} else begin p:= L; while p↑.next< > nil do p:= p↑.next; {p указывает на последнее звено в списке} p↑.next:= q {присоединили в конец списка новое звено} end end; {insert1} procedure insert2(L: list; x: elemtype); { вставляет в конец списка L с заглавным звеном элемент x} var p,q : link; begin new(q); q↑.elem := x; q↑.next:= nil; p:= L; while p↑.next< > nil do p:= p↑.next; {p указывает на последнее звено в списке} - 20 -
Страницы
- « первая
- ‹ предыдущая
- …
- 18
- 19
- 20
- 21
- 22
- …
- следующая ›
- последняя »