先来先服务(FCFS)、最短寻道时间优先(SSTf)、扫描算法(SCAN)、循环扫描算法(CSCAN)
最后有运行截图。
#include
#include
#include
#include
int a; //当前磁道号
int b; //磁头运动方向
int c[10]; //要访问的柱面号
int num; //需要输入的磁道数量
const int MAXQUEUE=200; //定义队列最大数
//结构体定义
typedef struct node{ //定义200磁道结构体
int value; //磁道的值
int visited; //磁道是否被访问标识
}CiDao;
CiDao queue[MAXQUEUE]; //声明最大磁道队列数
//输入需要输入的磁道数量
void shuru2()
{
printf("请输入需要输入的磁道数量:");
scanf("%d",&num);
}
//初始化函数
void initial()
{
for(int i=0;i
{
queue[i].value=-1; //初始化每个队列的值为-1
queue[i].visited=0; //初始化每个队列的访问标识为未访问
}
}
//输入当前磁道号和磁头运动方向
void shuru1()
{
printf("请输入初始磁道号:"); //输入初始磁道号
scanf("%d",&a);
printf("请选择磁头运动方向: \n"); //选择磁头运动方向
printf("******************\n");
printf(" 1.向里 \n");
printf(" 2.向外 \n");
printf("******************\n");
scanf("%d",&b);
printf("请输入要访问的柱面号: \n");
for(int j=0;j
scanf("%d",&queue[j].value);
printf("\n");
printf("当前磁道号为:%d\n",a);
printf("磁头运动方向为:%d\n",b);
printf("要访问的柱面号: ");
for(int i=0;i
printf("%d ",queue[i].value);
printf("\n");
printf("\n");
}
//先来先服务算法
void FCFS()
{
int i; //用来计数的局部参数
int total=0; //总的移过的柱面数
int current; //当前磁道号
cout<
cout<
current=a; //将输入的初始磁道号赋给当前磁道号
for(i=0;i
cout<
total+=abs(queue[i].value-current); //依次拿要访问的磁道号与当前磁道号相减并求其绝对值然后加到总的移过的柱面数上
current=queue[i].value; //将此次访问过的磁道号赋给当前磁道号
}
cout<
cout<
cout<
cout<
}
//最短寻道时间优先算法
void SSTF()
{
int i,j,p; //用来计数的局部参数
int total=0; //总的移过的柱面数
int current; //当前磁道号
for(i=0;i
queue[i].visited=0;
cout<