📄 多级反馈调度算法.c
字号:
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
struct kon{
int atime;
int ntime;
int proirity;
int alltime;
int whattime;
char c[2];
struct kon *next;
};
main()
{
int i,m,j,k,l,m1,all=0;
FILE *h;
struct kon pcs[101],*p,*p1,*p2,*p3,*p4,*head1,*head2,*head3,*head4,*q1,*q2,*q3,*q4;
head4=NULL;
p=pcs;
if((h=fopen("data.txt","r"))==NULL)
{
printf("File cannot be opened\n");
}
else
for(m=1;!feof(h);p++,m++)
{
fscanf(h,"%2s,%d,%d,%d,",p->c,&p->atime,&p->ntime,&p->proirity);
}
fclose(h);
for(i=0;i<m;i++)
for(j=i+1;j<m;j++)
if((pcs[i].atime)>(pcs[j].atime))
{
pcs[m+1]=pcs[i];
pcs[i]=pcs[j];
pcs[j]=pcs[m+1];
}
p=pcs;
for(i=0,k=0,j=0,l=0;i<m;p++,i++)
{
p->alltime=0;
if((p->proirity==1)&&(k==0))
{head1=p1=p;p->next=NULL;k=1;}
if((p->proirity==1)&&(k==1))
{p1->next=p;p->next=NULL;p1=p;}
if((p->proirity==2)&&(j==0))
{head2=p2=p;p->next=NULL;j=1;}
if((p->proirity==2)&&(j==1))
{p2->next=p;p->next=NULL;p2=p;}
if((p->proirity==3)&&(l==0))
{head3=p3=p;p->next=NULL;l=1;}
if((p->proirity==3)&&(l==1))
{p3->next=p;p->next=NULL;p3=p;}
}
printf("Please input the deal with time:");
scanf("%d",&m1);
for(k=0,p=head1;p!=NULL;)
{
if((p->ntime)>m1)
{
p->ntime=p->ntime-m1;
p->alltime=m1;
all=all+m1;
p->proirity++;
p2->next=p;
p2=p;
p=p->next;
p2->next=NULL;
}
else
{
p->alltime=p->ntime;
all=all+p->ntime;
p->whattime=all;
if(k==0)
{head4=p4=p;p=p->next;p4->next=NULL;k=1;}
else
{p4->next=p;p4=p;p=p->next;p4->next=NULL;}
}
printf("FirstQueue SecondQueue ThirdQueue HaveDone\n");
for(q1=p,q2=head2,q3=head3,q4=head4;(q1!=NULL)||(q2!=NULL)||(q3!=NULL)||(q4!=NULL);)
{
if(q1!=NULL)
{
printf("%s:%d%3d",q1->c,q1->ntime,q1->proirity);
q1=q1->next;
}
else printf(" ");
if(q2!=NULL)
{
printf("%6s:%2d%3d",q2->c,q2->ntime,q2->proirity);
q2=q2->next;
}
else printf(" ");
if(q3!=NULL)
{
printf("%7s:%2d%3d",q3->c,q3->ntime,q3->proirity);
q3=q3->next;
}
else printf(" ");
if(q4!=NULL)
{
printf("%6s:%2d%3d%3d",q4->c,q4->alltime,q4->whattime,q4->whattime-q4->atime);
q4=q4->next;
}
else printf(" ");
printf("\n");
}
getch();
}
m1=2*m1;
for(p=head2;p!=NULL;)
{
if((p->ntime)>m1)
{
p->ntime=p->ntime-m1;
p->alltime=p->alltime+m1;
all=all+m1;
p->proirity++;
p3->next=p;
p3=p;
p=p->next;
p3->next=NULL;
}
else
{
p->alltime=p->alltime+p->ntime;
all=all+p->ntime;
p->whattime=all;
if(k==0)
{head4=p4=p;p=p->next;p4->next=NULL;k=1;}
else
{p4->next=p;p4=p;p=p->next;p4->next=NULL;}
}
printf("FirstQueue SecondQueue ThirdQueue HaveDone\n");
for(q2=p,q3=head3,q4=head4;(q2!=NULL)||(q3!=NULL)||(q4!=NULL);)
{
if(q2!=NULL)
{
printf("%14s:%2d%3d",q2->c,q2->ntime,q2->proirity);
q2=q2->next;
}
else printf(" ");
if(q3!=NULL)
{
printf("%7s:%2d%3d",q3->c,q3->ntime,q3->proirity);
q3=q3->next;
}
else printf(" ");
if(q4!=NULL)
{
printf("%6s:%2d%3d%3d",q4->c,q4->alltime,q4->whattime,q4->whattime-q4->atime);
q4=q4->next;
}
else printf(" ");
printf("\n");
}
getch();
}
m1=2*m1;
for(p=head3;p!=NULL;)
{
if((p->ntime)>m1)
{
p->ntime=p->ntime-m1;
p->alltime=p->alltime+m1;
all=all+m1;
p->proirity++;
p3->next=p;
p3=p;
p=p->next;
p3->next=NULL;
}
else
{
p->alltime=p->alltime+p->ntime;
all=all+p->ntime;
p->whattime=all;
if(k==0)
{head4=p4=p;p=p->next;p4->next=NULL;k=1;}
else
{p4->next=p;p4=p;p=p->next;p4->next=NULL;}
}
printf("FirstQueue SecondQueue ThirdQueue HaveDone\n");
for(q3=p,q4=head4;(q3!=NULL)||(q4!=NULL);)
{
if(q3!=NULL)
{
printf("%27s:%2d%3d",q3->c,q3->ntime,q3->proirity);
q3=q3->next;
}
else printf(" ");
if(q4!=NULL)
{
printf("%6s:%2d%4d%4d",q4->c,q4->alltime,q4->whattime,q4->whattime-q4->atime);
q4=q4->next;
}
else printf(" ");
printf("\n");
}
getch();
}
printf("process bursetime nowtime turnover_time\n");
for(p=head4;p!=NULL;)
{
printf("%s:%10d%10d%15d",p->c,p->alltime,p->whattime,p->whattime-p->atime);
printf("\n");
p=p->next;
}
printf("The all process need %d to deal with!\n",all);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -