📄 tangprocess.c
字号:
//jingchengdiaodu.cpp
#include "stdio.h"
#include <stdlib.h>
#include <conio.h>
#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 initp()
{ PCB *first,*second;
if(ready==NULL)
{
p->link=ready;
ready=p;
}
else
{ first=ready;
second=first->link;
while(second!=NULL)
{
first=first->link;
second=second->link;
}
first->link=p;
}
}
/********************建立进程块函数****************************/
void input()
{int i,num;
//clrsrc();
printf("\n请输入进程个数:");
scanf("%d",&num);
for(i=0;i<num;i++)
{printf("\n进程号NO.%d:\n",i);
p=getpch(PCB);
printf("\n 输入进程名:");
scanf("%s",p->name);
printf("\n 输入进程的运行时间:");
scanf("%d",&p->ntime);
printf("\n");
p->rtime=0;
p->state='W';
p->link=NULL;
initp();
}
}
/*********************空间***************************/
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 ndtime \t runtime \n");
printf(" %s\t",pr->name);
printf(" %c\t",pr->state);
printf(" %d\t\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(int tpit)
{
int k=0;
while((k<tpit)&&(p->rtime<p->ntime))
{
(p->rtime)++;
k++;
}
if(p->rtime==p->ntime)
destroy();
else
{
p->state='W';
initp();
}
}
/**********************主函数**************************/
void main ()
{int len,h=0;
int tpit=0;
char ch;
input();
printf("输入时间片大小:");
scanf("%d",&tpit);
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(tpit);
printf("按任意键继续...");
ch=getchar();
}
printf("\n\n 进程已经完成.\n");
ch=getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -