ВУЗ:
Составители:
Рубрика:
- 31 -
Задача 4. Описать функцию equal(L1,L2), которая проверяет на равенство
списки L1 и L2.
Решение
Если хотя бы один из списков пуст, то в качестве результата функции
можно взять значение выражения L1 = L2. Действительно, если оба списка
пусты (т.е. L1 = nil и L2 = nil), то они равны и выражение L1 = L2 даёт
значение «истина»; если один пуст, другой не пуст (т.е. списки не равны), то
значением выражения будет «ложь». В случае, когда оба списка не пусты,
нужно организовать цикл, в котором два указателя L1 и L2 будут синхронно
«пробегать» по звеньям обоих списков, начиная с первых звеньев. Выход из
цикла происходит, если достигнуто последнее звено хотя бы в одном из
списков (т.е. L1↑.next = nil или L2↑.next = nil) или найдены звенья с
различающимися элементами(L1↑.elem < > L2↑.elem). Если выход
произошёл из-за неравенства элементов, то результат функции – «ложь». Если
же элементы равны, то результат зависит от того, указывают ли оба указателя
L1 и L2 на последние звенья. Это можно проверить с помощью выражения
L1↑.next = L2↑.next, которое принимает значение «истина» если и только
если L1↑.next = nil и L2↑.next = nil.
function equal(L1,L2:list): boolean;
{возвращает истину, если списки L1 и L2 равны, иначе –
ложь}
begin
if (L1 = nil) or (L2 = nil)
then equal:= L1=L2 {истина, если и только если оба
списка пусты}
else {оба списка непусты; L1 и L2 синхронно пробегают
звенья списков}
begin
while (L1↑.next<>nil) and (L2↑.next<>nil)
and (L1↑.elem=L2↑.elem)
{пока не достигли последнего звена в каком-либо
из списков
и текущие элементы списков равны,
переходим в каждом из списков к следующему звену}
do begin L1:=L1↑.next; L2:=L2↑.next end;
equal:=(L1↑.next=L2↑.next) and (L1↑.elem=L2↑.elem)
{истина, если и только если L1 и L2 указывают на
последние звенья и элементы в этих звеньях равны}
end
end;
Задача 5. Описать процедуру reverse(L), которая переворачивает
список L,
то есть первый элемент списка становится последним, второй – предпоследним
и т. д., бывший последним становится первым.
Решение
Задача 4. Описать функцию equal(L1,L2), которая проверяет на равенство
списки L1 и L2.
Решение
Если хотя бы один из списков пуст, то в качестве результата функции
можно взять значение выражения L1 = L2. Действительно, если оба списка
пусты (т.е. L1 = nil и L2 = nil), то они равны и выражение L1 = L2 даёт
значение «истина»; если один пуст, другой не пуст (т.е. списки не равны), то
значением выражения будет «ложь». В случае, когда оба списка не пусты,
нужно организовать цикл, в котором два указателя L1 и L2 будут синхронно
«пробегать» по звеньям обоих списков, начиная с первых звеньев. Выход из
цикла происходит, если достигнуто последнее звено хотя бы в одном из
списков (т.е. L1↑.next = nil или L2↑.next = nil) или найдены звенья с
различающимися элементами(L1↑.elem < > L2↑.elem). Если выход
произошёл из-за неравенства элементов, то результат функции – «ложь». Если
же элементы равны, то результат зависит от того, указывают ли оба указателя
L1 и L2 на последние звенья. Это можно проверить с помощью выражения
L1↑.next = L2↑.next, которое принимает значение «истина» если и только
если L1↑.next = nil и L2↑.next = nil.
function equal(L1,L2:list): boolean;
{возвращает истину, если списки L1 и L2 равны, иначе –
ложь}
begin
if (L1 = nil) or (L2 = nil)
then equal:= L1=L2 {истина, если и только если оба
списка пусты}
else {оба списка непусты; L1 и L2 синхронно пробегают
звенья списков}
begin
while (L1↑.next<>nil) and (L2↑.next<>nil)
and (L1↑.elem=L2↑.elem)
{пока не достигли последнего звена в каком-либо
из списков и текущие элементы списков равны,
переходим в каждом из списков к следующему звену}
do begin L1:=L1↑.next; L2:=L2↑.next end;
equal:=(L1↑.next=L2↑.next) and (L1↑.elem=L2↑.elem)
{истина, если и только если L1 и L2 указывают на
последние звенья и элементы в этих звеньях равны}
end
end;
Задача 5. Описать процедуру reverse(L), которая переворачивает список L,
то есть первый элемент списка становится последним, второй – предпоследним
и т. д., бывший последним становится первым.
Решение
- 31 -
Страницы
- « первая
- ‹ предыдущая
- …
- 29
- 30
- 31
- 32
- 33
- …
- следующая ›
- последняя »
