📄 时间片调度.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 + -