Динамические структуры данных. Задание практикума. Язык Паскаль. Вылиток А.А - 33 стр.

UptoLike

- 33 -
else
begin q:=L; {поиск подходящего места для вставки}
while (q.next< > nil) and (q.elem <= x)do
q:=q.next;
if q.elem <= x then {вставка в конец списка}
begin
p.elem:= x;
p.next:= nil;
q.next:= p
end
else {вставка x перед q.elem}
begin
p.next:= q.next;
q.next:= p;
p.elem:= q.elem;
q.elem:= x
end
end
end;
Задача 7. Описать рекурсивную процедуру count(L,e), которая
подсчитывает число вхождений элемента e в список L.
Решение
Если список пуст, то число вхождений элемента e в список L равно
нулю. Для непустого списка нужно подсчитать, сколько вхождений имеется в
«хвосте» списка,
и прибавить единицу или ноль в зависимости от того,
совпадает ли «голова» с элементом e.
function count(L:list;e:elemtype):integer;
{подсчитывает число вхождений элемента e в список L}
begin
if L = nil then count:=0
else count:=count(L.next,e)+ord(L.elem=e)
end;
Задача 8. Описать рекурсивную функцию copy(L), которая строит копию
списка L, возвращая ссылку на первое звено построенного списка
или nil, если
L пуст.
Решение
function copy(L:list):list;
{возвращает ссылку на копию списка L}
var head:link;
begin
   else
     begin q:=L; {поиск подходящего места для вставки}
       while (q↑.next< > nil) and (q↑.elem <= x)do
                                    q:=q↑.next;
       if q↑.elem <= x then {вставка в конец списка}
         begin
           p↑.elem:= x;
           p↑.next:= nil;
           q↑.next:= p
         end
        else {вставка x перед q↑.elem}
         begin
           p↑.next:= q↑.next;
           q↑.next:= p;
           p↑.elem:= q↑.elem;
           q↑.elem:= x
         end
    end
end;




Задача 7. Описать рекурсивную процедуру count(L,e),                 которая
подсчитывает число вхождений элемента e в список L.
                                 Решение
      Если список пуст, то число вхождений элемента e в список L равно
нулю. Для непустого списка нужно подсчитать, сколько вхождений имеется в
«хвосте» списка, и прибавить единицу или ноль в зависимости от того,
совпадает ли «голова» с элементом e.

function count(L:list;e:elemtype):integer;
{подсчитывает число вхождений элемента e в список L}
begin
  if L = nil then count:=0
      else count:=count(L↑.next,e)+ord(L↑.elem=e)
end;

Задача 8. Описать рекурсивную функцию copy(L), которая строит копию
списка L, возвращая ссылку на первое звено построенного списка или nil, если
L пуст.
                                 Решение

function copy(L:list):list;
{возвращает ссылку на копию списка L}
var head:link;
begin

                                   - 33 -