这道题目让我们实现三种磁盘调度算法:先来先服务(FCFS)、最短寻道优先(SSTF)、电梯算法(扫描和方向为从低磁道向高磁道)。同时,题目给出了一共有200个磁道,而访问的磁道流为81。c++代码
时间: 2023-11-27 22:49:26 浏览: 57
具有先来先服务算法和最短寻道时间优先算法的磁盘调度算法实现
5星 · 资源好评率100%
先来先服务(FCFS):
```c++
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main() {
int n, head, ans = 0;
cin >> n >> head;
int a[n];
for(int i = 0; i < n; i++) {
cin >> a[i];
}
ans += abs(head - a[0]);
for(int i = 1; i < n; i++) {
ans += abs(a[i] - a[i - 1]);
}
cout << ans << endl;
return 0;
}
```
最短寻道优先(SSTF):
```c++
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main() {
int n, head, ans = 0;
cin >> n >> head;
bool vis[n];
int a[n];
for(int i = 0; i < n; i++) {
cin >> a[i];
vis[i] = false;
}
for(int i = 0; i < n; i++) {
int k = -1;
for(int j = 0; j < n; j++) {
if(!vis[j]) {
if(k == -1) {
k = j;
}
else if(abs(a[j] - head) < abs(a[k] - head)) {
k = j;
}
}
}
vis[k] = true;
ans += abs(a[k] - head);
head = a[k];
}
cout << ans << endl;
return 0;
}
```
电梯算法(扫描和方向为从低磁道向高磁道):
```c++
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main() {
int n, head, ans = 0;
cin >> n >> head;
int a[n];
for(int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n);
int k = 0;
while(k < n && a[k] < head) {
k++;
}
for(int i = k - 1; i >= 0; i--) {
ans += abs(a[i] - head);
head = a[i];
}
ans += head;
head = 0;
for(int i = k; i < n; i++) {
ans += abs(a[i] - head);
head = a[i];
}
cout << ans << endl;
return 0;
}
```
阅读全文