FOJ 1893 内存管理

来源:互联网 发布:人工智能机器人哪里买 编辑:程序博客网 时间:2024/06/05 00:47

ono。纠结一下午。大一的校赛题,大三才解决,而且算是做了操作系统的作业。嘿嘿,偷懒下。

过段时间,贴上代码。

最佳适配算法,要选择足够大的而且最左边的。。。


#include <stdio.h>struct node{bool state;short id;short pre,next;}m[110];void Initial(){int i;for(i=0;i<=101;++i){m[i].id = 0;m[i].pre = 1;m[i].next = 101;m[i].state = false;}}bool Creat(int pid,int ps){int now = 1,pos = 0;while(now<=100){if(!m[now].state){if(m[now].next-now>=ps){pos = now;break;}}now = m[now].next;}if(pos>0){if(pos+ps<m[pos].next){m[pos+ps].next = m[pos].next;m[pos+ps].pre = pos;m[pos+ps].state = false;m[pos+ps].id = 0;m[m[pos].next].pre = pos + ps;m[pos].next = pos + ps;}m[pos].state = true;m[pos].id = pid;return true;}return false;}int Delete(int pid){int now = 1,ps;while(now<=100){if(m[now].id==pid){ps = m[now].next - now;if(!m[m[now].pre].state&&!m[m[now].next].state){m[m[now].pre].next = m[m[now].next].next;m[m[m[now].next].next].pre = m[now].pre;}else if(!m[m[now].pre].state){m[m[now].pre].next = m[now].next;m[m[now].next].pre = m[now].pre;}else if(!m[m[now].next].state){m[m[m[now].next].next].pre = now;m[now].next = m[m[now].next].next;}m[now].id = 0;m[now].state = false;return ps;}now = m[now].next;}return 0;}void Print(){int now = 1;while(now<=100){if(m[now].state)printf("P %d %d\n",m[now].id,m[now].next-now);elseprintf("H %d\n",m[now].next-now);now = m[now].next;}}int main(){int t,pid,ps;char ch[10];scanf("%d",&t);Initial();while(t){scanf(" %s",ch);if(ch[0]=='E'){Initial();t--;continue;}else if(ch[0]=='C'){scanf(" %d%d",&pid,&ps);if(Creat(pid,ps))printf("Create process %d of size %d successfully!\n",pid,ps);elseprintf("No enough memory!\n");}else if(ch[0]=='D'){scanf(" %d",&pid);ps = Delete(pid);if(ps>0)printf("Delete process %d of size %d successfully!\n",pid,ps);elseprintf("No such process!\n");}else if(ch[0]=='P')Print();}return 0;}


原创粉丝点击