#include
#include
using namespace std;
/*先来先服务调度
int i=0,sum=0,x;
x=abs(b[i]-num);
cout<
cout<
cout<
for(i=1;i
{
cout<
sum+=abs(b[i]-b[i-1]);
}
cout<
cout<
}
/*电梯调度算法*/
void scan(int b[],int n,int num) //n是磁道请求序列的个数(数组元素个数),num当前磁头所在磁头号,
{
int i,j,temp,s1=1,s2=1,k=1,sum1=0,sum2=0,a[20],c[20],option;
a[0]=num; c[0]=num;
for(i=0;i
for(j=i+1;j
{
if(b[i]>b[j]) //将磁道请求序列从小到大排序
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
for(i=0;i
{
if(b[i]
{
a[s1]=b[i]; s1++; //将磁头左边(小)的请求序列入栈
}
else
{
c[s2]=b[i]; s2++; //将磁头右边(大)的请求序列入栈
}
}
cout<
cout<
cin>>option; //option电梯调度方向选择
if(option==2) /*选择移动臂方向向外,则先向外扫描*/
{
cout<
cout<
for(i=1;i
{
cout<
sum1+=abs(c[i]-c[i-1]);
k++;
}
cout<
k++;
for(j=2;j
{
cout<
sum2+=abs(a[j]-a[j-1]);
k++;
}
cout<
cout<
}
if(option==1) /*选择移动臂方向向内,则先向内扫描*/
{
cout<
cout<
for(j=1;j
{
cout<
sum2+=abs(a[j]-a[j-1]);
k++;
}
cout<
k++;
for(i=2;i
{
cout<
sum1+=abs(c[i]-c[i-1]);
k++;
}
cout<
cout<
}
}
void main()
{
int c[25]; int i,n,nu,num,x; //nu磁道请求序列的个数,应小于25
cout<
cout<
cout<
cout<
cin>>n;
cout<,并以空格隔开===="<
for(i=0;i
cin>>c[i];
cout<
cin>>nu;
num=nu;
cout<
cout<
cout<
cin>>x;
while(x!=0)
{
switch(x)
{
case 1:FIFO(c,n,num);break;
case 2 :scan(c,n,num);break;
default :cout<
}
cout<
cin>>x;
}
cout<
}