首页 最佳适应算法_最坏适应算法2[新版]

最佳适应算法_最坏适应算法2[新版]

举报
开通vip

最佳适应算法_最坏适应算法2[新版]最佳适应算法_最坏适应算法2[新版] 最佳适应算法_最坏适应算法2 #include #include #include #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 100 //最大内存空间为100M typedef int Status; int flag;//标志 typedef struct freearea//定义一个空闲区说明表结...

最佳适应算法_最坏适应算法2[新版]
最佳适应算法_最坏适应算法2[新版] 最佳适应算法_最坏适应算法2 #include #include #include #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 100 //最大内存空间为100M typedef int Status; int flag;//标志 typedef struct freearea//定义一个空闲区说明 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 结构 { long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType;//元素类型 // 线性表的双向链表存储结构 typedef struct DuLNode//结构指针 { ElemType data; struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针 } DuLNode,*DuLinkList;//指针链表 DuLinkList block_first; //头结点 DuLinkList block_last; //尾结点 Status alloc(int);//内存分配 Status free(int); //内存回收 Status Best_fit(int); //最佳适应算法 Status Worst_fit(int);//最差适应算法 void show();//查看分配 Status Initblock();//开创空间表 Status Initblock()//开创带头结点的内存空间链表 { block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first->prior=NULL; block_first->next=block_last; block_last->prior=block_first; block_last->next=NULL; block_last->data.address=0; block_last->data.size=MAX_length; block_last->data.state=Free; return OK; } //分配主存 Status alloc(int ch) { int request = 0; cout<<"请输入需要分配的主存大小(单位:M):"; cin>>request; if(request<0 ||request==0) { cout<<"分配大小不合适,请重试~"< word word文档格式规范word作业纸小票打印word模板word简历模板免费word简历 _1713856119763_0最小剩余空间 DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode));//申请内存空间 temp->data.size=request; temp->data.state=Busy; DuLNode *p=block_first->next; DuLNode *q=NULL; //记录最佳插入位置 while(p) //初始化最小空间和最佳位置 { if(p->data.state==Free && (p->data.size>=request) ) { if(q==NULL) { q=p; ch=p->data.size-request; } else if(q->data.size > p->data.size) { q=p; ch=p->data.size-request; } } p=p->next; } if(q==NULL) return ERROR;//没有找到空闲块 else if(q->data.size==request) { q->data.state=Busy; return OK; } else { temp->prior=q->prior; temp->next=q; temp->data.address=q->data.address; q->prior->next=temp; q->prior=temp; q->data.address+=request; q->data.size=ch; return OK; } return OK; } //最差适应算法 Status Worst_fit(int request) { int ch; //记录最大剩余空间 DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode)); temp->data.size=request; temp->data.state=Busy; DuLNode *p=block_first->next; DuLNode *q=NULL; //记录最佳插入位置 while(p) //初始化最大空间和最佳位置 { if(p->data.state==Free && (p->data.size>=request) ) { if(q==NULL) { q=p; ch=p->data.size-request; } else if(q->data.size < p->data.size) { q=p; ch=p->data.size-request; } } p=p->next; } if(q==NULL) return ERROR;//没有找到空闲块 else if(q->data.size==request) { q->data.state=Busy; return OK; } else { temp->prior=q->prior; temp->next=q; temp->data.address=q->data.address; q->prior->next=temp; q->prior=temp; q->data.address+=request; q->data.size=ch; return OK; } return OK; } //主存回收 Status free(int flag) { DuLNode *p=block_first; for(int i= 0; i <= flag; i++) if(p!=NULL) p=p->next; else return ERROR; p->data.state=Free; if(p->prior!=block_first && p->prior->data.state==Free)//与前面的空闲块相连 { p->prior->data.size+=p->data.size; p->prior->next=p->next; p->next->prior=p->prior; p=p->prior; } if(p->next!=block_last && p->next->data.state==Free)// 与后面的空闲块相连 { p->data.size+=p->next->data.size; p->next->next->prior=p; p->next=p->next->next; } if(p->next==block_last && p->next->data.state==Free)//与最后的空闲块相连 { p->data.size+=p->next->data.size; p->next=NULL; } return OK; } //显示主存分配情况 void show() { int flag = 0; cout<<"\n主存分配情况:\n"; cout<<"++++++++++++++++++++++++++++++++++++++++++++++\n\n"; DuLNode *p=block_first->next; cout<<"分区号\t起始地址\t分区大小\t状态\n\n"; while(p) { cout<<" "<data.address<<"\t\t"; cout<<" "<data.size<<"M\t\t"; if(p->data.state==Free) cout<<"空闲\n\n"; else cout<<"已分配\n\n"; p=p->next; } cout<<"++++++++++++++++++++++++++++++++++++++++++++++\n\n"; } //主函数 void main() { int ch;//算法选择标记 l1: cout<<"请输入所使用的内存分配算法:\n"; cout<<"(1)最佳适应算法\n(2)最差适应算法\n"; cin>>ch; while(ch<1||ch>2) { cout<<"输入错误,请重新输入所使用的内存分配算法:\n"; cin>>ch; } Initblock(); //开创空间表 int choice; //操作选择标记 while(1) { show(); cout<<"请输入您的操作:"; cout<<"\n1: 分配内存\n2: 回收内存\n3: 返回上一层\n0: 退出\n"; cin>>choice; if(choice==3){ goto l1;} else if(choice==1) alloc(ch); // 分配内存 else if(choice==2) // 内存回收 { int flag; cout<<"请输入您要释放的分区号:"; cin>>flag; free(flag); } else if(choice==0) break; //退出 else //输入操作有误 { cout<<"输入有误,请重试~"<
本文档为【最佳适应算法_最坏适应算法2[新版]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_196623
暂无简介~
格式:doc
大小:26KB
软件:Word
页数:11
分类:生活休闲
上传时间:2018-02-19
浏览量:24