天天看點

java多級回報隊列程序排程,多級回報隊列排程算法

我是一名計算機專業的學生,很榮幸在這裡結識各位程式設計高手.今天第一次寫東西,希望大家多多支援,多多留言哦.以下是一個多級回報隊列排程算法,請各位幫忙看看對不對.如果誰能幫寫一個更好的那就更感謝了.THANK YOU VERY MUCH!

各位有什麼好的建議可發郵件到[email protected].

#include "stdio.h"

#include

#include

#define getpch(type) (type*)malloc(sizeof(type))

#define NULL 0

struct pcb {

char name[10];

char state;

int super;//優先級别

int ntime;//需運作時間

int rtime; //已經運作時間

struct pcb* link;

}*ready=NULL,*p;

typedef struct pcb PCB;

void sort()

{

PCB *first, *second;

int insert=0;

if(ready==NULL)

{

p->link=ready;

ready=p;

}

else

{

first=ready;

second=first->link;

while(second!=NULL)

{

first=first->link;

second=second->link;

}

if(insert==0) first->link=p;

}

}

void input()

{

int i,num;

system("cls");

printf("\n 程序排程輪轉法.cpp \n");

printf("\n 請輸入num再按回車,即程序個數為\n");

scanf("%d",&num);

for(i=0;i

{

printf("\n 程序号No.%d:\n",i);

p=getpch(PCB);

printf("\n 輸入程序名:");

scanf("%s",p->name);

printf("\n 輸入程序優先數:");

scanf("%d",&p->super);

printf("\n 輸入程序運作時間:");

scanf("%d",&p->ntime);

printf("\n");

p->rtime=0;p->state='w';p->link=NULL;

sort();

{}

int space()

{

int l=0; PCB* pr=ready;

while(pr!=NULL)

{

l++;

pr=pr->link;

}

return(l);

}

void disp(PCB * pr)

{

printf("\n qname \t state \t super \t ndtime \t runtime \n");

printf("|%s\t",pr->name);

printf("|%c\t",pr->state);

printf("|%d\t",pr->super);

printf("|%d\t",pr->ntime);

printf("|%d\t",pr->rtime);

printf("\n");

}

void check()

{

PCB* pr;

printf("\n **** 目前正在運作的程序是:%s",p->name);

disp(p);

pr=ready;

printf("\n ****目前就緒隊列狀态為:\n"); while(pr!=NULL)

{

disp(pr);

pr=pr->link;

}

}

void destroy()

{

printf("\n 程序 [%s] 已完成.\n",p->name);

free(p);

}

void running()

{

(p->rtime)++;

if(p->rtime==p->ntime)

destroy();

else

{

(p->super)--;

p->state='w';

sort();

}

}

void main()

{

int len,h=0;

char ch;

input();

len=space();

while((len!=0)&&(ready!=NULL))

{

ch=getchar();

h++;//标志執行的步驟

printf("\n The execute number:%d \n",h);

p=ready;

ready=p->link;

p->link=NULL;

p->state='R';

check();//顯示運作及等待隊列的狀況running();printf("\n 按任一鍵繼續......");

ch=getchar();}printf("\n\n 程序已經完成.\n");ch=getchar();}