1、/高响应比优先#include #include #define MAX 5#define M 0typedef float datatype;typedef struct node /单链表char name2;datatype arrive; /到达时间datatype service; /服务时间datatype wait; /等待时间datatype begin; /开始时间datatype finish; /结束时间datatype cycle; /周转时间datatype right; /带权周转时间datatype answer; /响应比struct node *next;Ln
2、ode;/输入进程信息,尾插入法将进程节点插入单链表void input(node *h) Lnode *p;p=(Lnode*)malloc(sizeof(Lnode);printf(“进程: “);scanf(“%s“,p-name);printf(“到达时间: “);scanf(“%f“,printf(“服务时间: “);scanf(“%f“,p-next=NULL;while(h-next!=NULL)h=h-next;p-next=h-next;h-next=p;/实现高响应比优先void program(Lnode *datatype max,temp;Lnode *p,*q;p=
3、h-next;p-begin=p-arrive;p-wait=p-begin-p-arrive; /等待时间开始时间-到达时间p-finish=p-begin+p-service; /完成时间=开始时间+服务时间p-cycle=p-service+p-wait; /周转时间=服务时间+等待时间p-right=p-cycle/p-service; /带权周转时间= 周转时间/ 服务时间temp=p-finish;/输出第一个进程的信息printf(“%st%3.1ft%3.1ft%3.1ft%3.1ft %3.1f t%3.1ft%3.1fn“,p-name,p-arrive,p-service
4、,p-wait,p-begin,p-finish,p-cycle,p-right);/查找响应比最高进程,从第二个进程开始while(inext; p=p-next;while(p!=NULL) if(p-arrivebegin=temp; /开始时间=上一个进程的结束时间p-wait=p-begin-p-arrive;p-answer=(p-wait+p-service)/p-service; /响应比=(等待时间+服务时间)/服务时间if(p-answermax)max=p-answer;p=p-next;j+;else break;else p=p-next;p=h-next; /p 指
5、向首节点/找出该节点(进程) ,并输出该进程信息while (knext;q=p-next;q-begin=temp;q-wait=q-begin-q-arrive;q-finish=q-begin+q-service;q-cycle=q-service+q-wait;q-right=q-cycle/q-service;printf(“%st%3.1ft%3.1ft%3.1ft%3.1ft %3.1f t%3.1ft%3.1fn“,q-name,q-arrive,q-service,q-wait,q-begin,q-finish,q-cycle,q-right);temp=q-finish;
6、/该进程的结束时间赋给 tempp-next=q-next; /删除该节点free(q); /释放该节点i+;void main()Lnode *h,*p;h=(Lnode*)malloc(sizeof(Lnode);h-next=NULL;char *b8=“进程“,“ 达到时间“,“ 服务时间“,“等待时间 “,“开始时刻“,“结束时刻“,“周转时间“,“ 带权周转时间“;int i=0;printf(“输入进程信息:n“);while(inext;while(p!=NULL) /输出单链表printf(“进程:%s 到达时间:%3.1f 服务时间:%3.1fn“,p-name,p-arrive,p-service);p=p-next;printf(“n“);printf(“%s %s %s %s %s %s %s %sn“,b0,b1,b2,b3,b4,b5,b6,b7);program(h);