先来先服务调度算法(FCFS,first come first served)
算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。
#include<stdio.h>
#include<iostream>
using namespace std;
struct process{
char name;
int arrive;//到达时间
int service;//服务时间
int finish;//完成时间
int zhouzhuan;//周转时间
int daiquan;//带权周转时间
};
struct process a[10];
void input(process a[],int n)
{
for(int i=0;i<n;i++)
{
cin>>a[i].name;
cin>>a[i].arrive;
cin>>a[i].service;
}
}
void print(process a[],int n)
{
for(int i=0;i<n;i++)
{
cout<<" 进程:"<<a[i].name;
cout<<" 到达时间:"<<a[i].arrive;
cout<<" 服务时间:"<<a[i].service;
cout<<" 周转时间:"<<a[i].zhouzhuan;
cout<<" 带权周转时间:"<<a[i].daiquan;
cout<<" 完成时间:"<<a[i].finish<<endl;
}
}
void paixv(process a[],int n)
{
int flag =1;
for(int i=0;i<n;i++)
{
flag=0;
for(int j=0;j<n-i-1;j++)
{
if(a[j].arrive>a[j+1].arrive)
{
process temp = a[j];
a[j] =a[j+1];
a[j+1] = temp;
flag=1;
}
}
if(flag == 0)
break;
}
}
void fifs(process a[],int n)
{
paixv(a,n);//排序
a[0].finish = a[0].arrive+a[0].service;
a[0].zhouzhuan = a[0].finish - a[0].arrive;
a[0].daiquan = a[0].zhouzhuan/a[0].service;
for(int i=1;i<n;i++)
{
if(a[i].arrive<a[i-1].finish)
{
a[i].finish = a[i-1].finish+a[i].service;
a[i].zhouzhuan = a[i].finish - a[i].arrive;
a[i].daiquan = a[i].zhouzhuan/a[i].service;
}else
{
a[i].finish = a[i].arrive+a[i].service;
a[i].zhouzhuan = a[i].finish - a[i].arrive;
a[i].daiquan = a[i].zhouzhuan/a[i].service;
}
}
print(a,n);
}
int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
int n;
cin>>n;
input(a,n);
// for(int i=0;i<n;i++)
//{
// cout<<" 进程:"<<a[i].name;
// cout<<" 到达时间:"<<a[i].arrive;
// cout<<" 服务时间:"<<a[i].service;
// cout<<endl;
//}
//paixv(a,n);
// for(int i=0;i<n;i++)
//{
// cout<<" 进程:"<<a[i].name;
// cout<<" 到达时间:"<<a[i].arrive;
// cout<<" 服务时间:"<<a[i].service;
// cout<<endl;
//}
fifs(a,n);
fclose(stdin);
// fclose(stdout);
}