fcfs实现算法饿不会

时间:2012-12-09 08:41:35
【文件属性】:

文件名称:fcfs实现算法饿不会

文件大小:3KB

文件格式:TXT

更新时间:2012-12-09 08:41:35

C语言

就是C语言#include #include #define MAX 5 //进程数 /*短作业优先算法*/ struct pro { int num; //进程名 int arriveTime; //到达时间 int burst; //运行时间; struct pro *next; }; //函数声明 struct pro* creatList(); void insert(struct pro *head,struct pro *s); struct pro* searchByAT(struct pro *head,int AT); void run(struct pro *head); void del(struct pro* p); int getCount(struct pro *head,int time); struct pro* creatList() //创建链表,按照进程的到达时间排列 { struct pro* head=(struct pro*)malloc(sizeof(struct pro)); head->next=NULL; struct pro* s; int i; for(i=0;inum)); printf("请输入到达时间:\n"); scanf("%d",&(s->arriveTime)); printf("请输入运行时间:\n"); scanf("%d",&(s->burst)); s->next=NULL; insert(head,s); } return head; } void insert(struct pro *head,struct pro *s) //插入节点 { struct pro *p=searchByAT(head,s->arriveTime); s->next=p->next; p->next=s; return; } struct pro* searchByAT(struct pro *head,int AT) //查找第一个到达时间大于等于AT的节点,返回其前一个指针 { struct pro *p,*q; p=head; q=head->next; while(q!=NULL&&q->arriveTime<=AT) { p=q; q=q->next; } return p; } void del(struct pro* p) //删除p的下一个节点 { struct pro *tmp; tmp=p->next; p->next=tmp->next; free(tmp); return; } int getCount(struct pro *head,int time) //察看当前就绪队列中的进程数 { int count=0; struct pro *p,*q; p=head; q=p->next; while(q!=NULL&&q->arriveTime<=time) { count++; p=q; q=q->next; } return count; } struct pro* SJF(struct pro *head,int count) //在头节点后的count个节点中选择burst最小的,返回其前一个节点的指针 { int min; struct pro *p,*q,*flag; p=head; q=p->next; min=q->burst; flag=p; //flag记录返回指针 while(count>0) { if(q->burstburst; flag=p; } count--; p=q; q=q->next; } return flag; } void run(struct pro *head) //按短作业优先算法调度进程,并输出其运行情况 { int time=0,count; struct pro *s,*t; while(head->next!=NULL) { count=getCount(head,time); if(count==0) //如果当前就绪队列中没有进程,时间自增 time++; else if(count==1) //如果就绪队列中只有1个进程,则必定是第一个节点 { t=head; s=t->next; printf("进程名:%d\n",s->num); printf("到达时间:%d\n",s->arriveTime); printf("运行开始时间:%d\n",time); printf("响应时间:%d\n",time-s->arriveTime); time+=s->burst; printf("运行结束时间:%d\n",time); printf("周转时间:%d\n",time-s->arriveTime); printf("*********************************\n"); del(t); } else //如果就绪队列中的进程数>=2,则在head后的count个节点中进行短作业优先调度 { t=SJF(head,count); s=t->next; printf("进程名:%d\n",s->num); printf("到达时间:%d\n",s->arriveTime); printf("运行开始时间:%d\n",time); printf("响应时间:%d\n",time-s->arriveTime); time+=s->burst; printf("运行结束时间:%d\n",time); printf("周转时间:%d\n",time-s->arriveTime); printf("*********************************\n"); del(t); } } } void main() { struct pro *head=creatList(); printf("按短作业优先算法调度运行结果如下:\n"); run(head); }


网友评论