先声明一下全局变量
int initPosition,maxSize,numTrack;//磁头所在位置,磁盘所能盛放的最大磁道数目,要访问的磁道数
int cost;//磁头总移动距离
vector<int> Track;//要访问的磁道们
vector<int> Result;//整理好的访问磁道的顺序
vector<int>sorted_Track;//把要访问 磁道顺序从小到大整理好
1.FCFS First Come First Sever 先来先服务
示例:
代码思路:先来先服务
void FCFS(){
Result.clear();
cost=abs(Track[0]-initPosition);
for (int i=0;i<Track.size()-1;i++){
cost=cost+abs(Track[i+1]-Track[i]);
}
Result=Track;
cout<<"FCFS"<<endl;
Print_Results();//打印结果的
}
2. SSTF shortest seek time first 最短访问时间优先
就是在我所有的要访问的磁道里,我先访问理我目前位置最近的。
示例:
代码思路:
先从大到小排序,在排好序了的要访问的队列里,先找离自己最近的,访问之后,再找左右两个位置里离自己最近的位置。
代码实现:
1.排序
2.找到里自己最近的一个,push入Result
3.从该节点开始,与左、右 位置进行做差对比。
if左边不存在或者右边不存在了,就把剩下整个排序队列push进result里
void SSTF(){
Result.clear();
vector<int> sorted_Track;
sorted_Track.push_back(Track[0]