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

📄 时间片调度.txt

📁 完成时间片调度的算法 一个时间片后显示各进程状态
💻 TXT
字号:
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0	

typedef struct 
   {
      int pname;     /*整型的进程名*/
      int needtime;
      int donetime;
      char status;     /*R表示就绪状态,E表示结束状态*/
    

   }process;



typedef struct Node
   {
      process data;
      struct Node *next;
   }Node,*LinkList;


LinkList CreateFromTail()
   {   
        char a='R';
        int i;
        LinkList l;
	Node *r;
        Node *s;
        l=(Node*)malloc(sizeof(Node));
        l->next=NULL;
        r=l;                /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
	for(i=1;i<=5;i++)
           {
            
              s=(Node*)malloc(sizeof(Node));
	          s->data.pname=i;
              s->data.donetime=0;
              s->data.status=a;
	      r->next=s;
	      r=s;
            
      
           }
       
         r->next=l->next;
         return l;
	 
   }

        
  



      
        
		
main()
   {  

      LinkList L;
      char a='R';
      char b='E';
      char c;
      int flag=1;
      int t1,t2,t3,t4,t5;
      int name;      
	  int nextname;


      Node *p,*q,*k,*m;

      L=CreateFromTail();
      p=L->next;   
      printf("请输入进程P1要求运行的时间:");
      scanf("%d",&t1); 
      p->data.needtime=t1;
      p=p->next;
            
      printf("请输入进程P2要求运行的时间:");
      scanf("%d",&t2);
      p->data.needtime=t2;
      p=p->next;

      printf("请输入进程P3要求运行的时间:");
      scanf("%d",&t3);
      p->data.needtime=t3;
      p=p->next;

      printf("请输入进程P4要求运行的时间:");
      scanf("%d",&t4);
      p->data.needtime=t4;
      p=p->next;

      printf("请输入进程P5要求运行的时间:");
      scanf("%d",&t5);
      p->data.needtime=t5;
      p=p->next;
      q=L;
  
   

  
   
      printf("请输入从哪个进程开始调度:");
      scanf("%d",&name);
      while(flag)
    {
     
      while(p->data.pname!=name)
         {  q=p;
            p=p->next;
			m=p;
            
         }
         
	  while(((m->data.donetime)+1==m->data.needtime)&&(m->next!=m))
	  { 
		
		m=m->next;
	    nextname=m->data.pname;
		name=nextname;
	  }

                 
      p->data.donetime=(p->data.donetime)+1;
       if(p->data.needtime==p->data.donetime)
         {          
           p->data.status=b;
           q=p;
           p=p->next;
         }
     else
        {
           q=p;
           p=p->next;
        }

     while(p!=q)
        {
           
            p->data.donetime=(p->data.donetime)+1;
         
            if(p->data.needtime==p->data.donetime)
             {
                       
                p->data.status=b;
               
                p=p->next;
             }
           else
            {
              
              
               p=p->next;
            }


        }
      

     printf("\n\n本轮调度完成后,各进程的状态如下\n");
	 printf("进程号");
     printf("P%d\n",p->data.pname);
     printf("需要运行的时间 : ");
           printf("%d\n",p->data.needtime);
           printf("已运行的时间: ");
           printf("%d\n",p->data.donetime);
           printf("进程状态: ");
		   
           printf("%c\n\n",p->data.status);

     p=p->next;     
          
     while(p!=q)
        {
                      
           printf("进程号");
           printf("P%d\n",p->data.pname);
           printf("需要运行的时间: ");
           printf("%d\n",p->data.needtime);
           printf("已运行的时间 : ");
           printf("%d\n",p->data.donetime);
           printf("进程状态: ");
           printf("%c\n\n",p->data.status);
           
           p=p->next;

       }

         

    k=L->next;
    q=L;
    p=L->next;
    


    while(k->next!=L->next)
       {
          k=k->next;
          q=q->next;
        
       }
    if((L->next->next==L->next
		)&&(L->next->data.status==b))
	{   flag=0;
		printf("所有进程调度结束");


	}
	else
	{
		while(L->next->data.status==b)
      {
        
         k->next=p->next;
         p=p->next;
         L->next=L->next->next;
        
 

     }//删除第一个接点

  while(p->next!=k)
    {
      if(p->next->data.status==b)
         p->next=p->next->next;
      else
         p=p->next;

    }

 if(k->data.status==b)
  
        q->next=q->next->next;
                   
 






    printf("现在还未完成的进程是: \n");


     for(p=L->next;(p->next)!=(L->next);p=p->next)
        {
           
           printf("%d\n",p->data.pname);
           
        }
          printf("%d\n",p->data.pname);

    printf("\n\n继续进行下一轮调度吗(y/n):");
    scanf("%c",&c);
    c=getchar();
    if(c=='y')
      flag=1;
    else 
      flag=0;

  }
}

}
               


       
      

      

     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -