if(m==0)
p[m].finishtime=p[m].arrivetime+p[m].servicetime; else
p[m].finishtime=p[m-1].finishtime+p[m].servicetime; int i=0,n;
for(n=m+1;n<=N-1;n++) {
if(p[n].arrivetime<=p[m].finishtime) i++; }
float max=(p[m].finishtime-p[m+1].arrivetime)/p[m+1].servicetime;//第m+1个的响应比
int follow=m+1;
for(int k=m+1;k if(max<=(p[m].finishtime-p[k+1].arrivetime)/p[k+1].servicetime) { max=(p[m].finishtime-p[k+1].arrivetime)/p[k+1].servicetime; follow=k+1; } } zgxyb temp; temp=p[m+1]; p[m+1]=p[follow]; p[follow]=temp; } deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); } linklist creatlinklist() { linklist head,r,s; int x,y; char ch[10];//因为要输的是字符串 head=r=(linklist)malloc(sizeof(linknode)); printf(\请输入一组编号,作业名,运行时间,以结尾\\n\); 6 scanf(\,&x,&ch,&y); while (x) { int a =10; s=(linklist)malloc(sizeof(linknode)); s->Num=x; s->runtime=y; //strcpy(s->Name,ch);//直接字符串复制 } r->next=s; r=s; scanf(\,&x,&ch,&y); } r->next=NULL; return head; } /*输出带头结点的单链表*/ void print(linklist head) { linklist p; p=head->next; printf(\); printf(\); while(p) { printf(\,p->Num,p->Name,p->runtime); p=p->next; } printf(\); } void main() {int G; scanf(\,&G); for(int i=0;i s->Name[i]=ch[i]; 7 if(G==1){ linklist head,pre,p,r; int t,i; head=creatlinklist(); print(head); printf(\请输入runtime:\); scanf(\,&t); pre=head; p=head->next; while(p) { } if (p->runtime>t)/*如果运行时间大于时间片*/ { } else { pre->next=p->next;/*如果进程运行时间小于时间片,就将第一个进程删除*/ free(p); p=head->next; i=1; while(p)/*因为删了一个进程就需要重新从开始设置一遍进程的排列序号*/ { } p->Num=i++; p=p->next; r=p->next; p->runtime=p->runtime-t;/*将第一个进程的运行时间减去一个时间片的时间*/ while(r->next)/*将r指向链表的最后一个结点以便用尾插法将P结点插入到链表的最后*/ { } pre->next=p->next; p->next=NULL; r->next=p; p=head->next; i=1; while(p)/*将进程的序号重新从开始设置一遍*/ { } p->Num=i++; p=p->next; r=r->next; 8 } else{int N; printf(\高响应比调度算法------\\n\); printf(\); scanf(\,&N); input(a,N); zgxyb *c=a; ZGXYB(c,N); } } } print(head);/*打印进程列表*/ pre=head; p=head->next; 4. 运行结果与运行情况分析 程序的第一步选择最高响应比调度算法,输入进程输入3个, 进程名字 提交时间 运行时间 a 2 3 b 3 2 c 3 3 程序的验证: 第一个进程在2点提交,3个小时的执行时间,在2点没有别的进程,所以a先执行,5点执行完后,而在5点执行前,b,c都提交了,所以就要判断响应比,响应比是等待时间加上执行时间,除以执行时间,所以b的响应比是2,c的响应比是5/3,所以b的响应比高,b先执行,最后是c执行,周转时间是完成时间减去提交时间,而带权周转时间是周转时间除以执行时间。经检验,平均周转时间4.67,平均带权周转时间是1.67.,经检验,结果是正确的。 9 如 果是时间片轮转则运行结果为: 10 百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库时间片轮转、最高响应比优先调度算法(2)在线全文阅读。
相关推荐: