Курсовая работа: Распределение памяти
if (pattern=pp) or (pattern=pa) then
if left<>nil then return(false);
return true;
end; {blockleft}
function blockright (cell:celltype): boolean;
{ Проверяет, является ли левое поле атомом или нуль указателем }
begin
with cell do
if (pattern=pp) or (pattern=ap) then
if right<>nil then return(false);
end;{blockright}
function block (cell:celltype):boolean;
{проверяет, помечена ли ячейка и не содержит ли ненулевые указатели}
begin
if (cell.mark=true) or blockleft(cell) and blockright(cell) then
return true
else return false
end; {block}
procedure nrdfs; {помечает ячейки, доступные из ячейки source}
var
current, previous:^celltype;
begin {инициализация}
current:=source1^.right; {ячейка на которую указывает source1}
previous:=source1;
source1^.back:=r;
source1^.right:=source1;
source1^.mark:=true;
state1: {Движение вперёд}
if block (current^) then