int TrackOrder[MaxNumber];//存放磁盘访问序列 int MoveDistance[MaxNumber];//存放每次的寻道长度 int VisitOrder[MaxNumber];//存放访问的顺序 bool direction;//磁头移动方向 int n;//磁道个数 int m;//开始磁道号 (2)主程序的流程:
变量初始化=》用户选择执行的算法=》若不符合条件,则退=》若符合,执行算法=》输出结果
(3)各程序模块之间的层次(调用)关系。
主程序调用初始化模块以及算法模块、输出模块
详细设计
实现程序模块的具体算法。 #include
int TrackOrder[MaxNumber];//存放磁盘访问序列 int MoveDistance[MaxNumber];//存放每次的寻道长度 int VisitOrder[MaxNumber];//存放访问的顺序 bool direction;//磁头移动方向 int n;//磁道个数 int m;//开始磁道号
出 void init(){//变量初始化 cout<<\输入磁道个数\ cin>>n;
cout<<\磁盘访问序列\ for(int i=0;i
cout<<\输入开始磁道号\ cin>>m;
cout<<\输入磁头移动方向,1为磁道号增加方向,0为磁道号减少方向\
cin>>direction; }
void fcfs(){
for(int i=0;i MoveDistance[i]=m-TrackOrder[i]; else MoveDistance[i]=TrackOrder[VisitOrder[i-1]]-TrackOrder[i];//按输入的磁盘访问序列寻道,寻道长度为前一个访问的磁道号减 当前访问的 } } void shunxu(){//排序,从小到大排列磁盘访问序列 for(int i=1;i if(TrackOrder[j]>TrackOrder[j+1]){ int temp=TrackOrder[j+1]; TrackOrder[j+1]=TrackOrder[j]; TrackOrder[j]=temp;//冒泡排序 } } } } void sstf(){ shunxu(); int i; int temp; for(i=0;i break; } }//找到小于开始磁道号的最后一个元素 if(abs(TrackOrder[temp]-m)>abs(TrackOrder[temp+1]-m)){//比较小于开始磁道号的最后一个元素和下一个元素哪个离开始磁道号远 VisitOrder[0]=temp+1; MoveDistance[0]=TrackOrder[temp+1]-m; temp=temp+1; } else{ VisitOrder[0]=temp; MoveDistance[0]=TrackOrder[temp]-m; }//取距离小的那个为第一个访问的元素 int h=temp-1; int k=temp+1; i=1; while(h>-1&&k if(abs(TrackOrder[h]-TrackOrder[VisitOrder[i-1]])>abs(TrackOrder[k]-TrackOrder[VisitOrder[i-1]])){ VisitOrder[i]=k; MoveDistance[i]=TrackOrder[VisitOrder[i-1]]-TrackOrder[k]; ++i; k++; } else{ VisitOrder[i]=h; MoveDistance[i]=TrackOrder[VisitOrder[i-1]]-TrackOrder[h]; ++i; h--; } } if(h==-1){ for(;k