📄 os_changeable_partition.pas
字号:
{以下程序模拟存储器的可变分区管理,采用最先适应分配算法,空闲区用链表来表示,
请将程序填写完整.}
program changeable_partition(input,output);
type
link=^partition; {指向空闲区的指针}
partition=record
next:link; {指向链表中下一个空闲区的指针}
s,l:integer {s:空闲区的始址,l:空闲区的长度}
end;
var
length,address:integer;
q,p,p1:link; {p:当前结点,p1:当前结点的前一个结点}
found,action,continue:0..1;
{found:申请时,表示是否找到所申请的分区,释放时,表示释放的分区在链表中
应插入的位置是否找到}
begin
new(p);
p^.s:=0;
p^.l:=100;
p^.next:=nil;
new(q);
q^.next:=p;
q^.s:=-1;
q^.l:=0;
continue:=1;
while continue=1 do
begin
p1:=q;
p:=q^.next;
write('请输入管理行为(0:申请,1:释放):');
readln(action);
case action of
0:
writeln('程序省略');
1:
begin
write('释放的分区地址为:');
readln(address);
write('释放的分区长度为:');
readln(length);
found:=0;
while found=0 do
begin
if p=nil then
begin
found:=1;
if p1^.s+p1^.l<>address then
begin
new(p);
p^.next:=nil;
p1^.next:=p;
p^.s:=address;
p^.l:=length;
end
else
begin
p1^.l:=p1^.l+length;
address:=p1^.s;
length:=p1^.l
end
end
else if address<p^.s then
{在链表中插入或合并释放的分区,要区分四种情况}
{填写程序段}
else
begin
p1:=p;
p:=p^.next
end;
end;
writeln('经释放合并后分区地址为:',address,',长度为:',length);
end;
end;
write('是否继续(0:结束,1:继续)?');
readln(continue);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -