电梯调度算法(源代码)

上传人:人*** 文档编号:511412471 上传时间:2023-04-11 格式:DOC 页数:10 大小:51.50KB
返回 下载 相关 举报
电梯调度算法(源代码)_第1页
第1页 / 共10页
电梯调度算法(源代码)_第2页
第2页 / 共10页
电梯调度算法(源代码)_第3页
第3页 / 共10页
电梯调度算法(源代码)_第4页
第4页 / 共10页
电梯调度算法(源代码)_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《电梯调度算法(源代码)》由会员分享,可在线阅读,更多相关《电梯调度算法(源代码)(10页珍藏版)》请在金锄头文库上搜索。

1、#include#include#include#includetypedefstruct_proccharname32;intteam;intci;intrec;struct_proc*prior;struct_proc*next;PROC;/*定义进程名称*/*定义柱面号*/*定义磁道面号*/*定义记录号*/PROC*g_head=NULL,*g_curr=NULL,*local;intrecord=0;intyi=1;voidinit()/*初始化链表(初始I/O表)PROC*p;*/g_head=(PROC*)malloc(sizeof(PROC);g_head-next=NULL;g

2、_head-prior=NULL;p=(PROC*)malloc(sizeof(PROC);strcpy(p-name,P1);p-team=100;p-ci=10;p-rec=1;p-next=NULL;p-prior=g_head;g_head-next=p;g_curr=g_head-next;p=(PROC*)malloc(sizeof(PROC);strcpy(p-name,P2);p-team=30;p-ci=5;p-rec=5;p-next=NULL;p-prior=g_curr;g_curr-next=p;g_curr=p;p=(PROC*)malloc(sizeof(PROC

3、);strcpy(p-name,P3);p-team=40;p-ci=2;p-rec=4;p-next=NULL;p-prior=g_curr;g_curr-next=p;g_curr=p;p=(PROC*)malloc(sizeof(PROC);strcpy(p-name,P4);p-team=85;p-ci=7;p-rec=3;p-next=NULL;p-prior=g_curr;g_curr-next=p;g_curr=p;p=(PROC*)malloc(sizeof(PROC);strcpy(p-name,P5);p-team=60;p-ci=8;p-rec=4;p-next=NULL

4、;/*选中进程*/p-prior=g_curr;g_curr-next=p;g_curr=g_head-next;local=(PROC*)malloc(sizeof(PROC);strcpy(local-name,P0);local-team=0;local-ci=0;local-rec=0;local-next=NULL;local-prior=NULL;voidPrintInit()/*打印I/O表*/PROC*t=g_head-next;printf(n);printf(I/OLISTn);printf(processteamcirecn);while(t!=NULL)printf(%

5、4s%8d%8d%5dn,t-name,t-team,t-ci,t-rec);t=t-next;printf(nnCurrentprocessis:n);printf(nn);printf(processteamcirecn);printf(%4s%8d%8d%5dn,local-name,local-team,local-ci,local-rec);switch(yi)case1:printf(currentdirectionisUPn);break;case0:printf(currentdirectionisdownn);break;voidacceptreq()/*接受请求函数*/PR

6、OC*p;newp=(PROC*)malloc(sizeof(PROC);printf(pleaseinputtheinformationoftheprocessnprocess-name:nprocess-teamnprocess-cinprocess-recn);printf(1.namen);scanf(%s,p-name);printf(2.team0-199n);scanf(%d,&p-team);printf(3.ci0-19n);scanf(%d,&p-ci);printf(4.rec0-7n);scanf(%d,&p-rec);getchar();/*输入请求进程信息*/g_c

7、urr=g_head;while(g_curr-next!=NULL)g_curr=g_curr-next;p-next=NULL;p-prior=g_curr;g_curr-next=p;g_curr=g_head-next;printf(NEWI/OLISTnn);PrintInit();/*将此节点链入I/O请求表*/*将新的I/O请求表输出*/voidqddd()PROC*out;intmin;intmax=g_head-next-team;if(g_head-next=NULL);/*驱动调度函数*/*若已全部调度,则空操作*/elseswitch(yi)case1:min=g_he

8、ad-next-team;out=g_head-next;进程*/strcpy(local-name,out-name);local-team=out-team;local-ci=out-ci;/*选出最小的team进程,模拟启动此local-rec=out-rec;for(g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if(g_curr-teamrecord)min=g_curr-team;break;for(g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if(min=g_curr

9、-team&g_curr-teamrecord)min=g_curr-team;out=g_curr;strcpy(local-name,out-name);local-team=out-team;local-ci=out-ci;local-rec=out-rec;printf(nn);printf(theprocesschoosed:n);printf(processteamcirecn);printf(%4s%8d%8d%5dn,out-name,out-team,out-ci,out-rec);record=local-team;printf(%d,record);for(g_curr=

10、g_head-next;g_curr!=NULL;g_curr=g_curr-next)if(maxteam)max=g_curr-team;if(max=record)yi=0;record=1000;break;break;/*case1*/case0:/*case1的对称过程*/max=g_head-next-team;out=g_head-next;strcpy(local-name,out-name);local-team=out-team;local-ci=out-ci;local-rec=out-rec;for(g_curr=g_head-next;g_curr!=NULL;g_

11、curr=g_curr-next)if(g_curr-teamteam;break;for(g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if(maxteam&g_curr-teamteam;out=g_curr;strcpy(local-name,out-name);local-team=out-team;local-ci=out-ci;local-rec=out-rec;printf(nn);printf(theprocesschoosed:n);printf(processteamcirecn);printf(%4s%8d%8d%5

12、dn,out-name,out-team,out-ci,out-rec);min=g_head-next-team;for(g_curr=g_head-next;g_curr!=NULL;g_curr=g_curr-next)if(ming_curr-team)min=g_curr-team;record=local-team;if(min=record)yi=1;record=0;break;break;default:return-1;/*将选中的进程从I/O请求表中删除*/*switch*/if(out-next=NULL)out-prior-next=NULL;free(out);el

13、seout-prior-next=out-next;out-next-prior=out-prior;free(out);/*else*/voidacceptnum()/*通过输入01选择驱动调度或是接受请求*/floatnum;charc;while(1)printf(n);printf(pleaseinputanumberbetween0and1nnum0.5:qudongdiaodunnnum=2:I/OLISTnnnum=?n);scanf(%f,&num);getchar();while(num1)&num!=2)/*过滤不合法数据注意:本程序其他输入数据可能未过滤*/printf(numberERROR!Inputagainplease!nnum=?n);scanf(%f,&num);getchar();if(num0.5&num!=2)/*驱动调度*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号