FCFS作业调度算法

操作系统单道批处理系统

FCFS作业调度算法

 

 

#include<stdio.h>
#include<stdlib.h>

#define getjcb(type) (type*)malloc(sizeof(type))
int counter=0;

typedef struct node
{
	char name[20];
	int InTime;
	int StartTime;
	int EndTime;
	int NeedTime;
	int RunTime;
	float X;
	char state;
	struct node *link;
}JCB;

JCB *line = NULL, *run = NULL, *finish, *p ;

void Sort(JCB *q)
{
	JCB *fst, *sed;
	fst = sed = line;
	int flag = 0;
	if (line == NULL)
	{
		q->link = line;
		line = q;
	}
	else
	{
		if (q->InTime < fst->InTime)
		{
		//	printf("1");
			q->link = fst;
			fst = q;
			line = q;
			flag = 1;
		}
		else
			while (fst->link != NULL)
			{
				fst = fst->link;
				if (q->InTime < fst->InTime)
				{
					q->link = fst;
					sed->link = q;
					flag = 1;
				}
				else
					sed = sed->link;
			}
		if ((fst->link == NULL) && (flag == 0))
		{
			q->link = fst->link;
			fst->link = q;
			flag = 1;
		}
	}
}

void OutPut()
{

	run->X = (run->StartTime - run->InTime + run->RunTime)*1.0 / (run->NeedTime);
	printf("作业名\t进入时间\t开始时间\t完成时间\t周转时间\t带权周转时间\n");
	printf("%s \t %d \t %d \t %d \t %d \t %f \t \n",run->name,run->InTime,run->StartTime,run->StartTime+run->RunTime,run->RunTime,run->X);
	//run = NULL;
	//if (finish == NULL)
	//{
		run->link = finish;
		finish = run;
	//}
	//else
	//{
	//	run->link = finish->link;
	//	finish->link = run;
	//}


	if (line == NULL)
	{	
		float ARound = 0, AwRound = 0, count = 0;
		while (finish != NULL)
		{
			ARound += finish->RunTime;
			AwRound += finish->X;
			count++;
			finish = finish->link;
			}
		ARound /= count;
		AwRound /= count;
		printf("平均周转时间\t平均带权周转时间\n");
		printf("%f \t %f \t \n", ARound,AwRound);
	}
}

void InPut()
{
	int num;
	JCB *tmp;
	printf("请输入作业个数:");
	scanf_s("%d", &num);
	for (int i = 1; i <= num; i++)
	{
		if ((tmp = (JCB *)malloc(sizeof(JCB))) == NULL)
		{
			perror("malloc");
			exit(1);
		}
		printf("作业 %d\n", i);

		printf("请输入作业名称:");
		scanf_s("%s", tmp->name, 20);
		printf("请输入作业到达时间:");
		scanf_s("%d", &(tmp->InTime));
		printf("请输入作业所需运行时间:");
		scanf_s("%d", &(tmp->NeedTime));
	//	printf("1.1");
		tmp->state = 'W'; 
	//	printf("1.2");
		tmp->X = 0;
	//	printf("1.3");
		tmp->RunTime = 0;
	//	printf("1");
		Sort(tmp);
	}
	/*
	JCB *x;
	x = line;
	for (int j = 1; j <= num; j++)
	{
		printf("%s \t",x->name);
		x = x->link;
	}
	printf("\n");
	*/
}



void GetFirst()
{
	run = line;
	if (line != NULL)
	{
		run->state = 'R';
		line = line->link;
		run->link = NULL;
	}
	//printf("%s \n", run->name);
}

void Insert(JCB *in)
{
	JCB *q;
	q = line;
	while (q->link != NULL)
	{
		q = q->link;
	}
	in->link = q->link;
	q->link = in;
}

void Run(int T)
{
	//GetFirst();
	//run->state = 'R';
	if (T > run->InTime)run->StartTime = T;
	else run->StartTime=run->InTime;
	run->RunTime = run->NeedTime;
	OutPut();
	//else Insert(run);
}

int main()
{

	InPut();
	int T=0;
	while (line != NULL)
	{
		//printf("XXX\n");
		GetFirst();
		Run(T);
		T += run->NeedTime;
		run == NULL;
		//printf("YYY\n");
	}
	//getchar();
	system("pause");
	return 0;
	
}

运行截图

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值