多级反馈队列调度算法
#include
#include
#include
#define NULL 0
#define MAL(type) (type *)malloc(sizeof(type))
using namespace std;
typedef struct LNode
{char name[5];
char state;
int runtime;
int needtime;
struct LNode *next;
}LNode;
LNode *H;
int T,D,J;
void print()
{LNode *p=H;
printf("\n进程名 需执行时间 已执行时间 状态\n");
for(int i=0;i
{printf("%s %10d %10d %c\n",p->name,p->needtime,p->runtime,p->state); p=p->next;
}
system("PAUSE");
}
void input()
{int i;
printf("请输入进程数:");
scanf("%d",&J);
for(i=0;i
{LNode *p,*q;
q=MAL(LNode);
printf("\n请输入第%d个进程的进程名:",i+1);
scanf("%s",&q->name);
printf("请输入第%d个进程需要的执行时间:",i+1);
scanf("%d",&q->needtime);
if(q->needtime
{printf("所需时间要大于0\n 请重新输入——\n");i--;}
else
{q->runtime=0;
q->state='N';
q->next=NULL;
}
if(i==0)
H=p=q;
else
{p->next=q;p=q;}
}
printf("\n进程初始化态为:");
print();
}
void run()
{int i,time=0,l=1;
printf("\n请输入队列个数:");
scanf("%d",&D);
printf("请输入第一个队列的时间片长度:");
scanf("%d",&T);
for(i=0;i
{int k=1;
LNode *p,*q;
if(i
else i--;
p=H;
while(p!=NULL)
{if(p->state=='Y'){p=p->next;continue;}
p->runtime=p->runtime+time;
if(p->needtimeruntime)
{if(p->needtime==p->runtime)
{p->state='Y';printf("进程%s已运行完毕!",p->name);} else
{p->runtime=p->needtime;p->state='Y';}
}
p=p->next;
}
for(q=H;q!=NULL;q=q->next)
{if(q->state=='N'){k=0;break;}
}
if(k==1)break;
else print();
}
}
int main()
{input();
run();
print();
printf("所有进程执行完成!\n"); system("PAUSE"); return 0;
}