请朋友帮忙优化一下下面的代码,降低其时间复杂度。。。

/****************************************模拟操作系统的优先级调度*******************************/

/*程序结构体说明: 

/*Process schedule
compiled with visual c++ 6.0
written by xiaoKINLVY and modification by HeNian
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*Define Process Structure*/
typedef struct _proc {
 char name[32];
 int run_time;
 int req_time;/*required time*/
 int pri;/*priority*/
 enum {
  READY = 0X01,END 
 }state;/*process state*/
 struct _proc *next;
}PROC;

int g_TotalTimeSlices = 0;
PROC *g_Head = NULL, *g_Curr = NULL;

void insertSort(PROC*p);

 

void init()
{
 PROC*p;
    g_Head=(PROC*)malloc(sizeof(PROC));
 g_Head->next=NULL;

 p=(PROC*)malloc(sizeof(PROC));
 strcpy(p->name,"P1");
 p->run_time=0;
 p->req_time=2;
 p->pri=1;
 p->state=PROC.READY;

 insertSort(p);


    p = (PROC*)malloc(sizeof(PROC));
 strcpy(p->name, "P2");
 p->run_time = 0;
 p->req_time = 3;
 p->pri = 5;
 p->state = PROC.READY;

 insertSort(p);


 p = (PROC*)malloc(sizeof(PROC));
 strcpy(p->name, "P3");
 p->run_time = 0;
 p->req_time = 1;
 p->pri = 3;
 p->state = PROC.READY;


 insertSort(p);

 p = (PROC*)malloc(sizeof(PROC));
 strcpy(p->name, "P4");
 p->run_time = 0;
 p->req_time = 2;
 p->pri = 4;
 p->state = PROC.READY;

 insertSort(p);

 p = (PROC*)malloc(sizeof(PROC));
 strcpy(p->name, "P5");
 p->run_time = 0;
 p->req_time = 4;
 p->pri = 2;
 p->state = PROC.READY;


 insertSort(p);
 
}


void insertSort(PROC*p)
{
 PROC *p0,*p1;
 p0=g_Head;
 p1=g_Head->next;

  if(g_Head->next==NULL)
  {
   p->next=g_Head->next;
   g_Head->next=p;
  
  }
  else
  {

 
 while(true)
 {
  if(p->pri>p1->pri)
  {
  
          while(p0->next!=NULL)
    {
     if(p0->next==p1)
     {
      break;
     }
     else
     {
      p0=p0->next;
     }
    }
 
    
   p->next=p1;
   p0->next=p;
          break;
  }
  else if(p1->next==NULL)
  {
   p1->next=p;
   p->next=NULL;
   break;
  }
  else
  {
   p1=p1->next;
  }

 }
 }
 
}


void PrintInfo()
{
 PROC *p = g_Head->next;
 printf("Time : %d/t Process Information/n", g_TotalTimeSlices);
 printf("name  run_time  req_time  pri  state/n");
 printf("------------------------------------/n");
 while(p != NULL){
  printf("%4s  %8d  %8d  %3d  %5s/n", p->name, p->run_time, p->req_time,
   p->pri, p->state == PROC.READY? "READY" : "END");
  p = p->next;
 }
 printf("Current process is %s/n", g_Curr->name);
 printf("-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/n/n");
}

void DeleteP(PROC*p)
{
 PROC*p1=g_Head;
 while(p1->next!=NULL)
 {
  if(p1->next==p)
   break;
  else
   p1=p1->next;
 }

 p1->next=p->next;
}


void Run()
{
  PrintInfo();
  g_Curr=(PROC*)malloc(sizeof(PROC));
  while(g_Head->next!=NULL)
  {  
   PROC*p_temp=NULL;
   g_Curr=g_Head->next;
    
  g_TotalTimeSlices++;
   g_Curr->req_time--;
   g_Curr->run_time++;
   g_Curr->pri--;
   if(g_Curr->req_time!=0)
   {
    PrintInfo();
    DeleteP(g_Curr);
          insertSort(g_Curr);
   }
   else
   {
    g_Curr->state=PROC.END;
    PrintInfo();
    //delete Function
    DeleteP(g_Curr);
    //PrintInfo();
  
   }
/*   g_TotalTimeSlices++;
   g_Curr->req_time--;
   g_Curr->run_time++;
   g_Curr->pri--;*/


  }

}


int main()
{
 init();

  Run();
  
  free(g_Head);
 
 return 0;

 

(1)       程序中使用的数据结构及符号说明
typedef struct _proc {/*进程结构体*/
       char name[32];/*进程名*/
       int run_time; /*运行时间*/
       int req_time;/*需要时间*/
       int pri;/*优先级:时间片调度中未使用*/
       enum {
              READY = 0X01,END   
       }state;/*进程状态*/
       struct _proc *next;
}PROC;
 
int g_TotalTimeSlices = 0;/*当前时间片数*/
PROC *g_Head = NULL, *g_Curr = NULL; /*头节点指针和当前节点指针*/
*/ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值