ВУЗ:
Составители:
Рубрика:
- 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
- …
- следующая ›
- последняя »