循环首次适应算法、首次适应算法、最佳适应算法 C语言版.doc_第1页
循环首次适应算法、首次适应算法、最佳适应算法 C语言版.doc_第2页
循环首次适应算法、首次适应算法、最佳适应算法 C语言版.doc_第3页
循环首次适应算法、首次适应算法、最佳适应算法 C语言版.doc_第4页
循环首次适应算法、首次适应算法、最佳适应算法 C语言版.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#define getpch(type) (type*)malloc(sizeof(type) struct LNode int size; int start; int end; struct LNode *next; struct LNode *front;*L; /*L为头指针*/typedef struct LNode LN;LN *find;int n;void InsertList(int size,int start)/ 在带头结点的单链线形表头结点后插入LN *p,*s,*t;p=L;t=p-next; s=getpch(LN); /生成新结点s-size=size;s-start=start;s-end=start + size ;s-next=t; /插入L中p-next=s;if(t) t-front=s;s-front=p;/end of InsertListvoid PrintList() /*打印*/LN *p; int i;p=L-next;printf(n空闲区号 长度 起始位置 终止位置n);for(i=1;isize, p-start,p-end);p=p-next;void BFSortList() /*最佳适应算法的排序*/ LN *p,*s,*t;int min_size,i;int size,start,end;t=L-next; p=L-next;for(i=0;inext;min_size = p-size;while(s)if(min_size s-size)min_size=s-size;t=s;s=s-next;size=t-size;start=t-start;end=t-end;t-size=p-size;t-start=p-start;t-end=p-end;p-size=size;p-start=start;p-end=end;t=p-next; p=p-next; / end of BF_SortListvoid SortList() /*首次和循环首次适应算法的排序*/LN *p,*s,*t;int min_start,i;int size,start,end;t=L-next; p=L-next;for(i=0;inext;min_start = p-start;while(s)if(min_start s-start)min_start=s-start;t=s;s=s-next;size=t-size;start=t-start;end=t-end;t-size=p-size;t-start=p-start;t-end=p-end;p-size=size;p-start=start;p-end=end;t=p-next; p=p-next; / end of BF_SortListvoid GetFree() /*生成空闲分区链*/int size,start,i; L=getpch(LN); /*生成一个表头结点*/L-next=NULL;L-front=NULL;printf(请输入空闲区数:);scanf(%d,&n);for(i=1;inext;t=L;while(p)if(size p-size)p=p-next;t=t-next;if(!p) printf(没有足够大的空闲区分配!分配不成功); elsep-size = p-size - size;p-start= p-start + size ;if(p-size=0)t-next = p-next ; p-next-front=t;n-;free(p);printf(分配成功!n);printf(分配后的空闲链表情况如下:n);PrintList();break;/ end of FF_Assignint flag=-1;void NF_Assign(int size)/*循环首次适应算法的分配*/LN *p,*t;int i=n;p=find-next;t=find;while(p)if(size p-size)p=p-next;t=t-next;if(!p) printf(没有足够大的空闲区分配!分配不成功); elsep-size = p-size - size;p-start= p-start + size ;find=p;if(p-size=0)t-next = p-next; p-next-front=t;n-;free(p);printf(分配成功!n); flag=1;printf(分配后的空闲链表情况如下:n);Print(L);break; if(flag=-1) p=L-next;t=L;while(p!=find)if(size p-size)p=p-next;t=t-next;if(!p) printf(没有足够大的空闲区分配!分配不成功); elsep-size = p-size - size;p-start= p-start + size ;find=t;if(p-size=0)t-next = p-next ; p-next-front=t;n-;free(p);printf(分配成功!n);printf(分配后的空闲链表情况如下:);PrintList(L);break; / end of NF_Assignvoid Recover(int start, int end) /*回收*/LN *p,*t;int size,flag=0;size=end-start;p=L-next;t=p-next; while(p) if(t & p-end=start & t-start=end)/回收区在两个空闲区中间p-size = p-size + size + t-size;p-end = t-end;p-next=t-next; t-next-front=p;free(t);n-;SortList(L);flag=1; break;else if(p-end = start)/回收区在空闲区下方 flag=1;p-size = p-size + size;p-end = p-end + size ;SortList(L); break;else if( p-start = end)/回收区在空闲区上方p-size= p-size +size;p-start=start;SortList(L);flag=1; break; p=p-next; if(p) t=p-next; /回收区不与任何一个空闲区相邻if(flag=0) InsertList(size,start); n+; printf(回收后的空闲链表情况如下:); PrintList(); printf(n按任意键继续); void main()int start,end,size;int m;GetFree();getch(); system(cls);/*清屏*/ printf(请选择服务类型:n); printf(t1:首次适应算法n); printf(t2:循环首次适应算法n); printf(t3:最佳适应算法n); printf(t4:回收内存n); printf(t0:退出n); printf(t输入您要的选项:); scanf(%d,&m); if(m=2) find=L; while(m) switch(m) case 1: SortList(); printf(n空闲链表情况:n); PrintList(); printf(请输入进程需要的空闲区大小:); scanf(%d,&size); Assign(size); printf(n按任意键继续); break; case 2: SortList(); printf(n空闲链表情况:n); PrintList(); printf(请输入进程需要的空闲区大小:); scanf(%d,&size); NF_Assign(size);printf(n按任意键继续); break; case 3: BFSortList(); printf(n空闲链表情况:n); PrintList(); printf(请输入进程需要的空闲区大小:); scanf(%d,&size); Assign(size);printf(n按任意键继续); break; case 4: printf(请输入回收区的首地址和中止地址:); scanf(%3d,%3d,&start,&end); Recover(start,end); break; case 0: exit(0); default : printf(ntt输入错误,请重新

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论