#include <bits/stdc++.h>
using namespace std;
/*
假设当前磁头在67号,要求访问的磁道号顺序为98,25,63,97,56,51,55,55,6
*/
int a[]= {98,25,63,97,56,51,55,55,6};
int citou = 67;
void FIFO()
{
int ans = 0;
int cnt = citou;
for(int i = 0; i<=8; i++)
{
ans += abs(cnt - a[i]);
cnt = a[i];
}
cout << "先来先服务 磁头移动总距离: " << ans <<endl;
}
void SSTF()
{
int ans = 0;
int vis[1000];
memset(vis,0,sizeof(vis));
int minn;
int cnt = citou;
int t;
for(int i = 0; i <= 8 ; i++)
{
int tmp = 0;
minn = 0;
for(int j=0; j<=8; j++)
{
if(vis[a[j]]==0)
{
tmp = abs(a[j]-cnt);
if(tmp<minn||minn==0)
{
minn = tmp;
t = j;
}
}
}
vis[a[t]]=1;
cnt = a[t];
ans += minn;
}
cout << "最短寻道时间算法 磁头移动总距离: " << ans <<endl;
}
void SCAN()
{
int b[10];
memset(b,0,sizeof(b));
for(int i=0; i<=8; i++)
b[i]=a[i];
sort(b,b+9);
int c[10],d[10];
int k = 0,t = 0,ans = 0;
int cnt = citou;
for(int i=0; i<=8; i++)
{
if(b[i]<=cnt)
{
c[k++]=b[i];
}
else
d[t++]=b[i];
}
for(int i =k-1; i>=0; i--)
{
ans+=abs(cnt - c[i]);
cnt =c[i];
}
for(int i=0 ; i<t; i++)
{
ans+=abs(cnt - d[i]);
cnt = d[i];
}
cout << "电梯调度算法 磁头移动总距离: " << ans <<endl;
}
void CSCAN()
{
int b[10];
memset(b,0,sizeof(b));
for(int i=0; i<=8; i++)
b[i]=a[i];
sort(b,b+9);
int c[10],d[10];
int k = 0,t = 0,ans = 0;
int cnt = citou;
for(int i=0; i<=8; i++)
{
if(b[i]<=cnt)
{
c[k++]=b[i];
}
else
d[t++]=b[i];
}
for(int i =k-1; i>=0; i--)
{
ans+=abs(cnt - c[i]);
cnt =c[i];
}
cnt=100;
int ans1=0;
for(int i=t-1 ; i>=0; i--)
{
ans1+=abs(cnt - d[i]);
cnt = d[i];
}
cout << "循环扫描算法 磁头移动总距离: " << ans +ans1 <<endl;
}
int main()
{
cout<<" 磁盘调度算法 栾兆威 "<<endl;
cout<<"给出的当前磁头在67号,要求访问的磁道号顺序为98,25,63,97,56,51,55,55,6"<<endl;
cout<<"请输入您要选择的算法: 1.FIFO 2.SSTF 3.SCAN 4.CSCAN 5.退出"<<endl;
int x;
while(1)
{
cout<<"请输入: ";
cin>>x;
if(x==1)
FIFO();
else if(x==2)
SSTF();
else if(x==3)
SCAN();
else if(x==4)
CSCAN();
else if(x==5)
{
break;
}
}
return 0;
}