您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 电子商务 > 非抢占短作业优先算法源代码C语言
非抢占短作业优先算法源代码(C语言)#include<stdio.h>#include<stdlib.h>#defineMAX5//进程数/*短作业优先算法*/structpro{intnum;//进程名intarriveTime;//到达时间intburst;//运行时间;structpro*next;};//函数声明structpro*creatList();voidinsert(structpro*head,structpro*s);structpro*searchByAT(structpro*head,intAT);voidrun(structpro*head);voiddel(structpro*p);intgetCount(structpro*head,inttime);structpro*creatList()//创建链表,按照进程的到达时间排列{structpro*head=(structpro*)malloc(sizeof(structpro));head->next=NULL;structpro*s;inti;for(i=0;i<MAX;i++){s=(structpro*)malloc(sizeof(structpro));printf("请输入进程名:\n");scanf("%d",&(s->num));printf("请输入到达时间:\n");scanf("%d",&(s->arriveTime));printf("请输入运行时间:\n");scanf("%d",&(s->burst));s->next=NULL;insert(head,s);}returnhead;}voidinsert(structpro*head,structpro*s)//插入节点{structpro*p=searchByAT(head,s->arriveTime);s->next=p->next;p->next=s;return;}structpro*searchByAT(structpro*head,intAT)//查找第一个到达时间大于等于AT的节点,返回其前一个指针{structpro*p,*q;p=head;q=head->next;while(q!=NULL&&q->arriveTime<=AT){p=q;q=q->next;}returnp;}voiddel(structpro*p)//删除p的下一个节点{structpro*tmp;tmp=p->next;p->next=tmp->next;free(tmp);return;}intgetCount(structpro*head,inttime)//察看当前就绪队列中的进程数{intcount=0;structpro*p,*q;p=head;q=p->next;while(q!=NULL&&q->arriveTime<=time){count++;p=q;q=q->next;}returncount;}structpro*SJF(structpro*head,intcount)//在头节点后的count个节点中选择burst最小的,返回其前一个节点的指针{intmin;structpro*p,*q,*flag;p=head;q=p->next;min=q->burst;flag=p;//flag记录返回指针while(count>0){if(q->burst<min){min=q->burst;flag=p;}count--;p=q;q=q->next;}returnflag;}voidrun(structpro*head)//按短作业优先算法调度进程,并输出其运行情况{inttime=0,count;structpro*s,*t;while(head->next!=NULL){count=getCount(head,time);if(count==0)//如果当前就绪队列中没有进程,时间自增time++;elseif(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);}}}voidmain(){structpro*head=creatList();printf("按短作业优先算法调度运行结果如下:\n");run(head);
本文标题:非抢占短作业优先算法源代码C语言
链接地址:https://www.777doc.com/doc-4658476 .html