编辑: wtshxd 2019-01-06

0 struct jcb { char name[10];

/*作业名*/ int ntime;

/*所需时间*/ int htime;

/*提交时间*/ int starttime;

/*作业开始运行时刻*/ int zhouzhuan;

/*周转时间*/ float daiquan;

/*带权周转时间*/ float xiangyingbi;

/*响应比*/ int super;

/*优先级*/ int flat;

/*是否被复制的标志位*/ char states;

/*作业状态,运行或者等待*/ struct jcb* next;

}*ready=NULL;

typedef struct jcb JCB;

JCB *head=NULL;

JCB *headFCFS=NULL;

JCB *headSJF=NULL;

JCB *headHRN=NULL;

JCB *headSUPER=NULL;

int clock=0;

/*定义计时时钟*/ int FCFS=0,SJF=0,HRN=0,SUPER=0;

/*定义四种算法是否选用过的标志,用于当选用过所有算法时打印出对比数据*/ int select;

/*算法选择*/ int lengh=0;

/*作业数量*/ void input();

void connect();

void myprintf();

void printftable();

void sortFCFS();

void sortSJF();

void sortHRN();

void sortSUPER();

void choose();

void execute(JCB *p);

void copynode(JCB *p1,JCB *p2);

void printffinish(JCB *p);

JCB *delenode(JCB *ph,JCB *p);

void printfall();

void destroy(JCB *p);

void input() { int i;

JCB *p;

printf( \n\n请输入作业数: );

scanf( %d ,&

lengh);

if(lenghnext);

printf( \n=n );

printf( 您选择的是: 短作业优先作业调度算法 \n\n );

printfall(headSJF->

next);

printf(n );

getch();

choose();

break;

} case 3: { HRN=1;

sortHRN();

printf( \n=n );

printf( 您选择的是: 高响应比作业调度算法\n\n );

printfall(headHRN->

next);

printf(n );

getch();

choose();

break;

} case 4: { SUPER=1;

sortSUPER();

execute(headSUPER->

next);

printf( \n=n );

printf( 您选择的是: 高优先权优先作业调度算法\n\n );

printfall(headSUPER->

next);

printf(n );

getch();

choose();

break;

} case 0: { exit(0);

} default: { choose();

} } } void sortFCFS()/*先来先服务*/ { JCB *pt=NULL,*ph=NULL,*p=NULL,*ps=NULL;

ph=getpch(JCB);

headFCFS=ph;

pt=ph;

ps=head->

next;

while(ps)/*复制head链表*/ { ps->

flat=1;

p=getpch(JCB);

copynode(p,ps);

pt->

next=p;

/*连接*/ pt=pt->

next;

ps=ps->

next;

} } void sortSJF()/*短作业优先*/ { JCB *pt=NULL,*ph=NULL,*p=NULL,*ps=NULL,*psminnt=NULL,*pflat=NULL;

int i=0;

pflat=head->

next;

while(pflat)/*清除是否被复制的标志位*/ { pflat->

flat=0;

pflat=pflat->

next;

} ph=getpch(JCB);

headSJF=ph;

p=getpch(JCB);

/*无论是哪一种算法,第一个提交的作业都是第一个运行这是书上的知识*/ copynode(p,head->

next);

ph->

next=p;

/*将第一个提交的作业第一个运行,可以充分利用处理机*/ pt=p;

for(i=0;

inext->

next;

psminnt=head->

next->

next;

/*作业所需时间最小的结点*/ while(psminnt->

flat==1)psminnt=psminnt->

next;

while(ps->

flat==1)ps=ps->

next;

while(ps)/*找出一个未复制过的且所需时间最小的结点进行复制*/ { if(ps->

flat==0&

&

ps->

ntimentime) { psminnt=ps;

} ps=ps->

next;

} psminnt->

flat=1;

/*置复制标志位为1下面进行复制*/ p=getpch(JCB);

copynode(p,psminnt);

pt->

next=p;

pt=pt->

next;

} } JCB *delenode(JCB *ph,JCB *p) { JCB *p1=NULL,*p2=NULL,*pt=NULL;

p1=ph;

p2=p1->

next;

while(p2&

&

p2!=p) { p2=p2->

next;

p1=p1->

next;

} if(p2!=p) { printf( \n删除结点失败\n );

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题