本文主要是介绍磁臂调度算法简单实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include <iostream>
#include<cmath>using namespace std;int main()
{int cur;int a[10 ];int b[10];int i=0;int n=0;int FCFSlength=0;int lengthSSF=0;cout<<"输入当前柱面号:";cin>>cur;cout<<"输入柱面请求序列,以-1表示输入结束"<<endl;for(i=0; ;i++){cin>>a[i];n++;if(a[i]==-1){break;}}n--;cout<<"先来先服务算法:"<<endl;FCFSlength=abs(cur-a[0]);for(int i=1;i<n;i++){FCFSlength += abs(a[i]-a[i-1]);}cout<<"柱面顺序为:"<<cur<<" ";for(i=0;i<n;i++){cout<<a[i]<<" ";}cout<<endl;cout<<"应用先来先服务序列响应一共需要移动:"<<FCFSlength<<"个页面"<<endl;cout<<endl;cout<<"******************************"<<endl;cout<<endl;cout<<"最短寻道优先算法:"<<endl;//排序for(int i=0;i<n-1;i++){for(int j=i+1;j<n;j++){if(a[i]>=a[j]){int temp=a[j];a[j]=a[i];a[i]=temp;}}}int min=100;int j,q;int k=0;int t;int count=0;for(int i=0;i<n;i++){if(min>abs(a[i]-cur)){k=i;min=abs(a[i]-cur);}}cout<<"k="<<k<<endl;j=k;q=k;t=k;b[count++]=k;lengthSSF=abs(a[k]-cur);q++;j--;do{if(abs(a[q]-a[k])<abs(a[j]-a[k])){lengthSSF +=abs(a[q]-a[k]);k=q;b[count++]=k;q++;}else{lengthSSF +=abs(a[j]-a[k]);k=j;b[count++]=k;j--;}}while(q<n&&j>=0);if(k==q){while(j>=0){lengthSSF+=abs(a[j]-a[k]);k=j;b[count++]=k;j--;}}else{while(q<n){lengthSSF += abs(a[q]-a[k]);k=q;b[count++]=k;q++;}}cout<<"顺序为:"<<cur<<" ";for(int i=0;i<n;i++){cout<<a[b[i]]<<" ";}cout<<endl;cout<<"最短寻道优先序列共需要移动"<<lengthSSF<<"个柱面"<<endl;cout<<endl;cout<<"******************************"<<endl;cout<<endl;cout<<"SCAN 算法"<<endl;int lengthSCAN=0;lengthSCAN=abs(a[n-1]-cur);lengthSCAN+=abs(a[n-1]-a[0]);cout<<"顺序为:"<<cur<<" ";for(int i=t;i<n;i++){cout<<a[i]<<" ";}for(int i=t;i>=0;i--){cout<<a[i]<<" ";}cout<<endl;cout<<"电梯算法需要移动"<<lengthSCAN<<"个柱面"<<endl;//1 36 16 34 9 12 -1}
这篇关于磁臂调度算法简单实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!