#include <stdio.h>
#include <string.h>
//使用timer()函数
#include <windows.h>
//时间延迟
#define DELAY 100
//时间片
#define SJP 4
/**********全局变量声明**********/
unsigned short TIME=0; //时间
unsigned short NUM=0; //进程数量
char TYPE='1'; //模拟类型
//PCB结构体定义
typedef struct PCB
{
int name;
char state; //[R]Run,[F]Finish,[P]Pause,[N]New
unsigned short priority; //数字越大,优先级越高,最小为1
unsigned short t_arrive; //到达时间
unsigned short t_start; //开始时间
unsigned short t_finish; //完成时间
unsigned short t_service; //服务时间
unsigned short t_run; //运行时间
unsigned short t_wait; //等待时间
struct PCB *next;
} pcb;
pcb *now=NULL, //现在运行的pcb
*head=NULL; //pcb链头部指针
/**********函数声明**********/
void fcfs(); //先到先服务
void sjf(); //短作业优先
void gyxb(); //高优先比
void sjplz(); //时间片轮转
void init(); //初始化,完成pcb录入
pcb *sort(pcb*); //对init()录入的pcb按到达时间排序
void timer(); //定时器,每一个延迟自我调用一次
void result(); //打印结果
//短作业优先算法
void sjf()
{
pcb *p=head,*p_min=NULL;
unsigned short t_min=9999;
//从现在时间以前并且未结束的进程中,选出服务时间最小的进程
while(p!=NULL && p->t_arrive<=TIME)
{
if(p->state=='F')
{
p=p->next;
continue;