ВУЗ:
Составители:
Рубрика:
- 17 -
Из примеров видно, что длина цепочки (количество звеньев в ней) может
динамически изменяться, т.е. изменяться в процессе выполнения программы.
Подобно цепочкам можно сконструировать и более сложные структуры, в
которых объекты связаны между собой с помощью ссылок. Такого рода
структуры данных называются динамическими.
Приведём реализацию некоторых операций над списками.
function is_empty(L: list):boolean;
{ возвращает истину, если список пуст, иначе – ложь}
begin
is_empty:= L = nil
end; {is_empty}
function is_valid(L: list; i:integer):boolean;
{ возвращает истину,если в списке есть i-й элемент,
иначе - ложь }
var p: link; k:integer;
begin
p:=L; k:=1;
while (p< > nil) and (k<=i) do
begin p:=p↑.next; k:=k+1 end;
is_valid:=(k>i) and (i>0)
end; {is_valid}
Рассмотрим работу функции is_valid для разных случаев. Если список L
пуст (L = nil), цикл в теле функции не выполнится ни разу, так как условие
p < > nil ложно. Значение переменной k равно единице, поэтому выражение
(k>i) and (i>0) ложно для любого i. Функция возвратит значение «ложь».
Если i<1, то цикл также ни разу не выполнится, так как при начальном
значении k, равном единице, отношение k<=i ложно. Отношение i>0 также
ложно, следовательно, значением выражения (k>i) and (i>0) будет
«ложь», т.е. функция возвращает значение «ложь». Если i>=1 и в списке есть
i-й элемент, то тело цикла выполнится ровно i раз. Переменная k получит
L
'a'
'c'
nil
'd'
q
{ q↑.next:= L↑.next; L↑.next:=q }
{ q↑.next:= L↑.next; L↑.next:=q }
'a'
L 'c' nil
q
'd'
Из примеров видно, что длина цепочки (количество звеньев в ней) может
динамически изменяться, т.е. изменяться в процессе выполнения программы.
Подобно цепочкам можно сконструировать и более сложные структуры, в
которых объекты связаны между собой с помощью ссылок. Такого рода
структуры данных называются динамическими.
Приведём реализацию некоторых операций над списками.
function is_empty(L: list):boolean;
{ возвращает истину, если список пуст, иначе – ложь}
begin
is_empty:= L = nil
end; {is_empty}
function is_valid(L: list; i:integer):boolean;
{ возвращает истину,если в списке есть i-й элемент,
иначе - ложь }
var p: link; k:integer;
begin
p:=L; k:=1;
while (p< > nil) and (k<=i) do
begin p:=p↑.next; k:=k+1 end;
is_valid:=(k>i) and (i>0)
end; {is_valid}
Рассмотрим работу функции is_valid для разных случаев. Если список L
пуст (L = nil), цикл в теле функции не выполнится ни разу, так как условие
p < > nil ложно. Значение переменной k равно единице, поэтому выражение
(k>i) and (i>0) ложно для любого i. Функция возвратит значение «ложь».
Если i<1, то цикл также ни разу не выполнится, так как при начальном
значении k, равном единице, отношение k<=i ложно. Отношение i>0 также
ложно, следовательно, значением выражения (k>i) and (i>0) будет
«ложь», т.е. функция возвращает значение «ложь». Если i>=1 и в списке есть
i-й элемент, то тело цикла выполнится ровно i раз. Переменная k получит
- 17 -
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »
