首页 动态分区分配 最佳 最坏 适应算法

动态分区分配 最佳 最坏 适应算法

举报
开通vip

动态分区分配 最佳 最坏 适应算法我伟大的母校 课程设计报告书 实践课题:  动态分区分配        姓    名:      路人甲          学    号:    20XXXXXX      指导老师:      路人乙          学    院:  计算及科学与技术学院 课程设计实践时间 2013.3.11~2013.3.22 一.课程设计的目的:   二.设计内容: 三.设计要求: 四.程序流程图 Alloc Best_fit Worst_fit Free Show Main 五.源代码 #incl...

动态分区分配  最佳 最坏 适应算法
我伟大的母校 课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 报告书 实践课题:  动态分区分配        姓    名:      路人甲          学    号:    20XXXXXX      指导老师:      路人乙          学    院:  计算及科学与技术学院 课程设计实践时间 2013.3.11~2013.3.22 一.课程设计的目的:   二.设计内容: 三.设计要求: 四.程序 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图 Alloc Best_fit Worst_fit Free Show Main 五.源代码 #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<<"分配大小不合适,请重试!"<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<<"输入有误,请重试!"< 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 问题解决问题和综合利用C语言进行编程的技巧和能力。   在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。 8.参考资料 《计算机操作系统(第三版)》汤晓丹  梁红兵等编著        西安电子科技大学出版社 《C程序设计(第三版)》  谭浩强  著                      清华大学出版社 《Visual C++面向对象与可视化程序设计(第三版)》 黄维通 贾续函 著  清华大学出版
本文档为【动态分区分配 最佳 最坏 适应算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_769254
暂无简介~
格式:doc
大小:269KB
软件:Word
页数:13
分类:生活休闲
上传时间:2017-09-20
浏览量:57