Використання вільної пам'яті, Детальна інформація
Використання вільної пам'яті
function isinr ( a : integer; lp : Plist ) : boolean;
begin
if lp = nil then isinr := false else
{ обробка голови }
if a = lp^.v then isinr := true else
{ рекурсивно перевірити належність елемента підсписку }
isinr := isinr ( a, lp^.subl )
end
Далі ми запишемо рекурсивну функцію addordr додавання елемента в упорядкований список зі збереженням його упорядкованості та повернення вказівника на список, у який вставлено елемент. Але спочатку напишемо функцію newelemr, подібну процедурі newelem з підр.16.3. На відміну від тієї процедури, вказівник на новий елемент повертається з неї.
function newelemr(p : Plist; z : integer) : Plist;
var pp : Plist;
begin
new(pp); pp^.subl:=p; pp^.v:=z;
newelemr:=pp
end;
Наведена функція використовується в функції addordr:
function addordr ( a : integer; lp : Plist ) : Plist;
var p : Plist;
begin
if (lp = nil) or (a < lp^.v) then
{список, ідентифікований lp, стає підсписком }
{ за новим головним елементом }
addordr := newelemr ( lp, a );
else
begin { рекурсивно додати елемент до підсписку }
lp^.subl := addordr ( a, lp^.subl );
addordr := lp
end
end
Рекурсивна функція delr задає вилучення елемента, що подає задане значення, зі списку та повернення вказівника на список, у якому значення a відсутнє:
begin
if lp = nil then isinr := false else
{ обробка голови }
if a = lp^.v then isinr := true else
{ рекурсивно перевірити належність елемента підсписку }
isinr := isinr ( a, lp^.subl )
end
Далі ми запишемо рекурсивну функцію addordr додавання елемента в упорядкований список зі збереженням його упорядкованості та повернення вказівника на список, у який вставлено елемент. Але спочатку напишемо функцію newelemr, подібну процедурі newelem з підр.16.3. На відміну від тієї процедури, вказівник на новий елемент повертається з неї.
function newelemr(p : Plist; z : integer) : Plist;
var pp : Plist;
begin
new(pp); pp^.subl:=p; pp^.v:=z;
newelemr:=pp
end;
Наведена функція використовується в функції addordr:
function addordr ( a : integer; lp : Plist ) : Plist;
var p : Plist;
begin
if (lp = nil) or (a < lp^.v) then
{список, ідентифікований lp, стає підсписком }
{ за новим головним елементом }
addordr := newelemr ( lp, a );
else
begin { рекурсивно додати елемент до підсписку }
lp^.subl := addordr ( a, lp^.subl );
addordr := lp
end
end
Рекурсивна функція delr задає вилучення елемента, що подає задане значення, зі списку та повернення вказівника на список, у якому значення a відсутнє:
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021