模拟实现最短寻道时间优先算法C语言
时间: 2023-08-06 10:09:03 浏览: 43
最短寻道时间优先和扫描算法C++实现
5星 · 资源好评率100%
以下是模拟实现最短寻道时间优先算法的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
// 计算两个磁道之间的距离
int distance(int head, int track) {
return abs(head - track);
}
// 寻找距离当前磁头位置最近的磁道
int find_nearest(int head, int *tracks, int n) {
int min_dist = INT_MAX;
int nearest = -1;
for (int i = 0; i < n; i++) {
if (tracks[i] != -1) {
int dist = distance(head, tracks[i]);
if (dist < min_dist) {
min_dist = dist;
nearest = i;
}
}
}
return nearest;
}
// 最短寻道时间优先算法
void sstf(int head, int *tracks, int n) {
int total_distance = 0;
int visited[n];
for (int i = 0; i < n; i++) {
visited[i] = -1;
}
int count = 0;
while (count < n) {
int nearest = find_nearest(head, tracks, n);
if (nearest == -1) {
break;
}
int track = tracks[nearest];
visited[count++] = track;
total_distance += distance(head, track);
head = track;
tracks[nearest] = -1;
}
printf("访问顺序:");
for (int i = 0; i < n; i++) {
printf("%d ", visited[i]);
}
printf("\n总寻道移动距离:%d\n", total_distance);
}
// 测试
int main() {
int head = 50;
int tracks[] = {82, 170, 43, 140, 24, 16, 190};
int n = sizeof(tracks) / sizeof(tracks[0]);
sstf(head, tracks, n);
return 0;
}
```
其中,head表示磁头的初始位置,tracks表示待访问的磁道列表,n表示待访问磁道的数量。在每一次循环中,寻找距离当前磁头位置最近的磁道,并选择它进行访问,直到所有磁道都被访问完毕。最后输出访问顺序和总寻道移动距离。
阅读全文