ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:16.01KB ,
资源ID:15002998      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-15002998.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最佳适应算法源代码.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

最佳适应算法源代码.docx

1、最佳适应算法源代码#include #include /全局变量float minsize=5;int count1=0;int count2=0;#definem10/假定系统允许的空闲区表最大为m#definen10/假定系统允许的最大作业数量为n/已分配表的定义structfloat address;/已分分区起始地址float length;/已分分区长度,单位为字节int flag;/已分配区表登记栏标志,0表示空栏目used_tablen;/已分配区表对象名/空闲区表的定义:structfloat address;/空闲区起始地址float length;/空闲区长度,单位为字节i

2、nt 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=n-1; a+)used_tablea.flag=0;/已分配表的表项全部置为空表项free_table0.address=1000;free_table0.length=1024;free_table0.flag=1;/空闲区表的表项

3、全部为未分配/最优分配算法实现的动态分区int distribute(int process_name, float need_length)int i, k=-1;/k用于定位在空闲表中选择的未分配栏floatads, len;int count=0;i=0;while(i=m-1)/循环找到最佳的空闲分区if(free_tablei.flag=1 & need_length =free_tablei.length)count+;if(count=1|free_tablei.length free_tablek.length)k=i;i=i+1;if(k!=-1)if(free_tablek

4、.length-need_length)=minsize) /整个分配free_tablek.flag=0;ads=free_tablek.address;len=free_tablek.length;else/切割空闲区ads=free_tablek.address;len=need_length;free_tablek.address+=need_length;free_tablek.length-=need_length;i=0;/循环寻找内存分配表中标志为空栏目的项while(used_tablei.flag!=0)i=i+1;if(i=n-1)/找到,在已分配区表中登记一个表项use

5、d_tablei.address=ads;used_tablei.length=len;used_tablei.flag=process_name;count1+;else/已分配区表长度不足if(free_tablek.flag = 0)/将已做的整个分配撤销free_tablek.flag=1;free_tablek.address=ads;free_tablek.length=len;else/将已做的切割分配撤销free_tablek.address=ads;free_tablek.length+=len;cout内存分配区已满,分配失败!n;return 0;elsecout 无法为

6、该作业找到合适分区!n;return 0;return process_name;int recycle(int process_name)int y=0;float recycle_address, recycle_length;int i, j, k;/j栏是下邻空闲区,k栏是上栏空闲区int x;/在内存分配表中找到要回收的作业while(y=n-1&used_tabley.flag!=process_name)y=y+1;if(y=n-1)/找到作业后,将该栏的标志置为0recycle_address=used_tabley.address;recycle_length=used_ta

7、bley.length;used_tabley.flag=0;count2+;else/未能找到作业,回收失败cout=m|(k!=-1&j!=-1)/修改空闲分区表if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length)=recycle_address)k=i;/判断是否有上邻接if(recycle_address+recycle_length)=free_tablei.address)j=i;/判断是否有下邻接i=i+1;/合并空闲区if(k!=-1)/回收区有上邻接if(j!=-1) /回收区也有下邻接,和上下领接合

8、并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的

9、栏目if(x=m-1)/找到后,在空闲分区中登记回收的内存free_tablex.address=recycle_address;free_tablex.length=recycle_length;free_tablex.flag=1;else/空闲表已满,执行回收失败used_tabley.flag=process_name;cout空闲区已满,回收失败!n;return 0;return process_name;void show()/程序执行时输出模拟的内存分配回收表cout+n;cout+空闲区+n;cout+n;for(int i=0;i=count2;i+)cout地址:free

10、_tablei.address作业长度:free_tablei.length状态:free_tablei.flagendl;cout+n;cout+已分配区+n;cout+n;for(int j=0;jcount1;j+)cout地址:used_tablej.address作业长度:used_tablej.length作业名:used_tablej.flagendl;void main()/主函数调用各功能函数对所有工作进行测试int choice;/用来选择将要进行的操作int job_name;float need_memory;bool exitFlag=false;cout动态分区分配

11、方式的模拟n;cout*n;cout请选择操作类型:n;initialize(); /开创空闲区和已分配区两个表while(!exitFlag)cout*n;cout*1:分配内存2:回收内存*n;cout*3:查看分配0:退出*n;cout*n;coutchoice;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;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2