模拟利用最短寻道时间优先算法实现磁盘调度 C++
时间: 2023-09-29 17:05:20 浏览: 165
好的,下面是一个简单的C++程序,使用最短寻道时间优先算法实现磁盘调度:
```
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN = 1005;
int n, m, head, tail, loc, ans;
int a[MAXN], que[MAXN], vis[MAXN];
int main() {
cin >> n >> m;
for(int i = 1; i <= m; i++) {
cin >> a[i];
}
loc = a[1]; // 起始位置为第一个请求的位置
head = 1, tail = 0;
que[++tail] = loc;
vis[1] = 1; // 标记第一个请求已被处理
while(head <= tail) {
int min_dis = 0x3f3f3f3f, idx = -1;
for(int i = 1; i <= m; i++) {
if(!vis[i]) { // 如果该请求还未被处理
int dis = abs(a[i] - loc); // 计算该请求与当前位置的距离
if(dis < min_dis) { // 找到最近的请求
min_dis = dis;
idx = i;
}
}
}
if(idx != -1) { // 如果找到了最近的请求
ans += min_dis; // 总移动距离加上当前距离
loc = a[idx]; // 当前位置移动到该请求的位置
vis[idx] = 1; // 标记该请求已被处理
que[++tail] = loc; // 将该请求的位置加入队列
}
else { // 如果没有未处理的请求了
break;
}
}
cout << "总移动距离为:" << ans << endl;
cout << "磁头移动顺序为:";
for(int i = 1; i <= tail; i++) {
cout << que[i] << " ";
}
cout << endl;
return 0;
}
```
程序运行时需要输入磁盘请求的数量n和请求序列,以及起始位置m。程序会输出总移动距离和磁头移动的顺序。
阅读全文