可变存储分配和回收

实验说明:

求采用某种分配算法(首次适应算法,循环首次适应算法,最佳适应算法,最差使用算法)实现可变存储算法的模拟操作,并实现回收空间的操作,这里要求使用链表的形式实现,建议采用最佳适应算法,首次适应算法

提示:这里可以使用两个链表,一个链表中存储已经分配的内存区,另一个链表中存储未分配的存储区,回收时采用模拟回收的方法,即输入一个内存区号,在已分配的链表中找到这个内存块,删除,并合并到另一个未分配的链表中,这里要考虑回收的各种情况,即单独的分区,可以和上面空闲区合并的分区,可以和下面空闲区合并的分区,可以和上下分区合并的分区。

    其中初始数据,可以自己输入,对于分配和回收的数据自己输入,要求对于分配和回收的各种分支情况,均可以测试到

3 实验评分:

如学生程序完全正确,且程序格式规范,可读性好,建议80分以上,如果学生的部分程序虽然存在局部问题,但某些地方具有一定的改进或创新,对于这种情况,建议评分在80分以下

如果有算法不正确或调试有问题,一般成绩不高于75分,如果有大部分程序都有问题 ,或存在抄袭,则不能及格。

测试数据:输入容量:1000

申请20010015050100

释放10050

申请40

释放40

释放100

 

 

 

 

Struct  block

{

   Int no; //编号

Int begging //起始位置

   Int size; //大小

   Int ending; //终止位置

   Struct block *next;

}

Struct block *unuse_list,*use_list; //为方便,采用带头结点的链表

Int numble; //块的编号

Void main()

{

  Void require();

  Void release();

Numble=0;

输入总的空间大小,初始位置默认为0

  Put it into the unuselist;

  Do while .t.

    Printf(“*****************”);

    Printf(“1 require”)

  Printf(“2 release”);

Printf(“other :exit);

Printf(“*****************”);

    Scanf(“%d”,&choice)

     If choice= =1  require();

  else

If choice= =2  release();

 Else

Break;

}

 

Void require()

{

  输入申请的空间的大小;

  在未使用链表中找出第一个符合大小的空闲块

  把这个空闲块的被申请部分形成的新块放入使用链表中(产生新的编号,修改块的基本信息)

  If there is remainder

   {delete the block from unuselist 

重新放入未使用链表中(从小到大,修改块的基本信息);

}

}

 

Void release()

{

   显示使用链表和未使用链表

   输入要回收的块的编号

   从已使用链表中删除该块

   把该块放入空闲链表中(考虑四种回收的情况,考虑合并的操作,并要求从小到大放入)

}

 

源代码:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值