FOj 1893 内存管理

http://acm.fzu.edu.cn/problem.php?pid=1893

写完你就知道os中, 基于最佳适配算法分配内存是怎么实现来的啊

题目不难,但烦

#include<iostream> using namespace std; struct yy { char state; int size; int pid; }y[100]; int main() { int t,kong,yong,tmp,i,msize,mxb,id,psize; char c[8]; bool flag; scanf("%d",&t); while(t--) { y[0].state='H'; y[0].size=100; kong=1; yong=0; for(i=1;i<100;i++) { y[i].state=0; y[i].size=-1; } scanf("%s",c); while(1) { if(strcmp(c,"Create")==0) { scanf("%d%d",&id,&psize); tmp=0; msize=200; mxb=-1; for(i=0;i<100;i++) { if(y[i].state=='H') { if(y[i].size>=psize&&y[i].size<msize) { msize=y[i].size; mxb=i; i+=(y[i].size-1);// tmp++; } } else if(y[i].state=='P') i+=(y[i].size-1);// if(tmp>=kong) break; } if(mxb==-1) printf("No enough memory!/n"); else { printf("Create process %d of size %d successfully!/n",id,psize); tmp=y[mxb].size-psize; y[mxb].pid=id; y[mxb].size=psize; y[mxb].state='P'; yong++; if(tmp!=0) { mxb+=psize; y[mxb].state='H'; y[mxb].size=tmp; } else kong--; } } else if(strcmp(c,"Delete")==0) { scanf("%d",&id); tmp=0; flag=false; for(i=0;i<100;i++) { int j,k,xb; if(y[i].state=='P') { tmp++; if(y[i].pid==id) { printf("Delete process %d of size %d successfully!/n",id,y[i].size); flag=true; yong--; if(i==0) { y[i].state='H'; xb=i; kong++; } else { j=i-1; while(j>=0) { if(y[j].state=='H') { y[j].size+=y[i].size; y[i].state=0; y[i].size=-1; xb=j; break; } else if(y[j].state=='P') { y[i].state='H'; xb=i; kong++; break; } j--; } } if(i==99) { y[i].state='H'; kong++; } else { k=i+1; while(k<100) { if(y[k].state=='H') { y[xb].size+=y[k].size; kong--; y[k].state=0; y[k].size=-1; break; } else if(y[k].state=='P') break; k++; } } } else i+=(y[i].size-1);// } else if(y[i].state=='H') i+=(y[i].size-1);// if(tmp>=yong) break; } if(!flag) { printf("No such process!/n"); } } else if(strcmp(c,"Print")==0) { for(i=0;i<100;i++) { if(y[i].state=='H') { printf("H %d/n",y[i].size); i+=(y[i].size-1); } else if(y[i].state=='P') { printf("P %d %d/n",y[i].pid,y[i].size); i+=(y[i].size-1);//i+1 } } } else if(strcmp(c,"End")==0) break; scanf("%s",c); } } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值