#include
#include
void FCFS()
{ int a[9]={55,58,39,18,90,160,150,38,184};
int sit,i,j;
sit=100;j=0;
printf("当前磁头所在号为:100\n");
for(i=0;i<9;i++)
printf("磁道号:%d\n",a[i]);
for(i=0;i<9;i++)
{ j=j+abs(sit-a[i]);
sit=a[i];
}
printf("则平均寻道长度为:%.1f\n",j/9.0);
}
void SSTF()
{ int a[9]={55,58,39,18,90,160,150,38,184};//磁道
int sit,i,j,t,b[9],d[9],c[9],shu,s,z;
shu=0;sit=100;//初始磁头
for(s=8;s>=0;s--)//大循环控制
{
for(i=0;i<=s;i++)
{
if(a[i]>sit)//查找a[]数组总大于磁头的磁道
{b[i]=a[i]-sit;
c[i]=0; //用作记录
d[i]=b[i];//用于下面更新sit磁头的值
}
else
{b[i]=sit-a[i];
d[i]=b[i];
c[i]=1;
}
}
for(i=0;i<s;i++)
{ if(b[i]<b[i+1])
{ t=b[i];
b[i]=b[i+1];
b[i+1]=t;
}
} //利用冒泡排序选出最小的磁头磁道差
shu=shu+b[s];//shu用作选出磁头磁道差相加
for(i=0;i<=s;i++)
{if((b[s]==d[i])&&(c[i]==0))//更新磁头值
sit=sit+d[i];
if((b[s]==d[i])&&(c[i]==1))
sit=sit-d[i];
printf("%d\n",sit);
}
for(j=0;j<=s;j++)//循环用于将磁头指向的磁道去掉
if(a[j]=sit)
{ z=a[j];
a[j]=a[s];
a[s]=z;
printf("%d %d %d \n",j,sit,a[j]);
}
}
}
void main()
{ //FCFS();
SSTF();
}