资源描述:
《用C编程最佳适应算法.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include#include#defineN3typedefstructtable//分区表{intnum;//分区号intsize;//空闲去的大小intfirstadd;//起始地址structtable*next;}spare;typedefstructinput{charname[10];intsize;}job;//读取进程intscanfb(jobJob[N]){intm,i;FILE*rf;rf=fopen("course.txt","r");fscanf(rf,"%d"
2、,&m);for(i=0;inext;//printf("t%dt%dt%d",q->num,q->size,q->firstadd);r
3、=Q->next->next;q->next=NULL;//printf("t%dt%dt%d",r->num,r->size,r->firstadd);while(r!=NULL){p=Q;q=Q->next;while(q!=NULL&&r->size>q->size){p=q;q=q->next;}t=r;r=r->next;t->next=NULL;t->next=q;p->next=t;}}//输出链表voidprint(spare*Q){inti=1;spare*q,*p;q=Q->next;while(
4、q!=NULL){printf("t第%d行t%dt%dt%d",i++,q->num,q->size,q->firstadd);q=q->next;}printf("");}//最佳适应算法voidbestfit(spare*Q,jobJob[N]){inti=0;spare*q,*p;do{p=Q;q=Q->next;while(q!=NULL&&q->sizenext;}if(p==NULL)printf("内存不足,%dK大小的作业需要等待内存资源!
5、",Job[i].size);if(q!=NULL){q->size=q->size-Job[i].size;q->firstadd=q->firstadd+Job[i].size;if(q->size==0){p->next=q->next;free(q);}}i++;sort(Q);}while(q!=NULL);}voidmain(){jobJob[N];spare*Q,*p,*q,*r,*m;inti,n;FILE*rf;rf=fopen("input.txt","r");/*只读打开文件*/fscanf(rf,"%d
6、",&n);/*读入个数*/Q=(spare*)malloc(sizeof(spare));Q->next=NULL;p=Q;q=(spare*)malloc(sizeof(spare));fscanf(rf,"%d%d%d",&(q->num),&(q->size),&(q->firstadd));q->next=NULL;p->next=q;//printf("%d%d%d",q->num,q->size,q->firstadd);for(i=1;inext;m=Q;p=q;q=(spare*
7、)malloc(sizeof(spare));fscanf(rf,"%d%d%d",&(q->num),&(q->size),&(q->firstadd));//printf("%d%d%d",q->num,q->size,q->firstadd);q->next=NULL;while(r!=NULL&&r->sizesize){m=r;r=r->next;//printf("%d%d%d",q->num,q->size,q->firstadd);}q->next=r;m->next=q;//printf("%
8、d%d%d",q->num,q->size,q->firstadd);}print(Q);scanfb(Job);//sort(Q);bestfit(Q,Job);printf("----最佳适应算法分区分配后的空闲区----");print(Q);}