⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 多级反馈调度算法.c

📁 用C实现多级反馈调度算法。在队列中使用FCFS
💻 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 + -