1、#include #include /全局变量float minsize=5;int count1=0;int count2=0;#define m 10 /假定系统允许的空闲区表最大为 m#define n 10 /假定系统允许的最大作业数量为 n/已分配表的定义structfloat address; /已分分区起始地址float length; /已分分区长度,单位为字节int flag; /已分配区表登记栏标志,“0“表示空栏目used_tablen; /已分配区表对象名/空闲区表的定义:structfloat address; /空闲区起始地址float length; /空闲区长度
2、,单位为字节int flag; /空闲区表登记栏标志,用“0“表示空栏目,用“1“表示未分配free_tablem; /空闲区表对象名/函数声明void initialize(void);int distribute(int, float);int recycle(int);void show();/初始化两个表void initialize(void)int a;for(a=0; a=m|(k!=-1 /判断是否有上邻接if(recycle_address+recycle_length)=free_tablei.address)j=i; /判断是否有下邻接i=i+1;/合并空闲区if(k!=
3、-1) /回收区有上邻接if(j!=-1) /回收区也有下邻接,和上下领接合并free_tablek.length+=free_tablej.length+recycle_length;free_tablej.flag=0; /将第 j 栏的标记置为0else /不存在下邻接,和上邻接合并free_tablek.length+=recycle_length;else if(j!=-1) /只有下邻接,和下邻接合并free_tablej.length+=recycle_length;free_tablej.address=recycle_address;else /上下邻接都没有x=0;while(free_tablex.flag!=0)x=x+1; /在空闲区表中查找一个状态为 0的栏目if(xchoice;switch(choice)case 0:exitFlag=true; /退出操作break;case 1:coutjob_nameneed_memory;distribute(job_name, need_memory); / 分配内存 break;case 2:int ID;coutID;recycle(ID); /回收内存break;case 3:show();break;