电梯调度算法-C++

1.算法解析

扫描算法(SCAN)又称电梯调度算法,SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。电梯调度算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。

这个算法好比乘电梯,如果电梯已向上运动到4层时,依次有3位乘客陈生、伍生、张生在等候乘电梯。他们的要求是:陈生在2层等待去10层;伍生在5层等待去底层;张生在8层等待15层。由于电梯目前运动方向是向上,所以电梯的形成是先把乘客张生从8层带到15层,然后电梯换成下行方向,把乘客伍生从5层带到底层,电梯最后再调换方向,把乘客陈生从2层送到10层。

由于磁盘移动臂的初始方向有两个,而该算法是与移动臂方向有关,所以分成两种情况来讨论。
现有需要读取的数据的柱面次序为:35 12 73 230 80 20 310 120,初始柱面为65号。
(1)移动臂向外移动:当65操作结束后,应该先处理35号柱面的请求,然后到达20号柱面执行操作,随后处理12号柱面请求,后继操作的次序应该是73、80、120、230、310。
(2)移动臂向内移动:当65操作结束后,应该先处理73号柱面的请求,然后到达80号柱面执行操作,随后处理120号柱面请求,后继操作的次序应该是230、310、35、20、12。

2.代码
①电梯调度算法函数SCAN()

int SCAN(int *cyclist, int *cycorder, int n, int start, int dir){
//参数:cyclist[] 输入的待操作的柱面数组,cycorder[] 操作柱面的顺序结果
//     n 柱面的个数,start 初始的柱面号, dir 移动臂方向(0外越小,1内越大)
//返回值:sum SCAN的走道总和int sum, min, mid, index, tag[100] = {0};sum = 0;for(int j=0; j<n; j++){     //此循环得出cycorder[]和累加summin = 9999;				//将最小值初始化为无穷大for(int i=0; i<n; i++){  //次循环得出距离start最小值minif(dir == 1 && cyclist[i] > start && tag[i] == 0){  //判断是否时向内运动mid = cyclist[i] - start;if(mid < min){min = mid;index = i;      //记录下与start最近柱面的下标}}else if(dir == 0 && cyclist[i] < start && tag[i] == 0){  //判断是否时向内运动mid = abs(cyclist[i] - start);if(mid <min){min = mid;index = i;       //记录下与start最近柱面的下标}}}if(dir && Max(cyclist, n, cyclist[index]))    //判断此时进行操作的柱面是否为此方向最大dir = 0;else if(Min(cyclist, n, cyclist[index]))      //判断此时进行操作的柱面是否为此方向最小dir = 1;sum += min;tag[index] = 1;          //将标记数组置为1,表示已经将其柱面进行操作cycorder[j] = cyclist[index];start = cyclist[index];}return sum;
}

②操作柱面大小判断函数Max()、Min()

//参数:cyclist[] 待操作的柱面数组,n 柱面的个数,num 此时操作柱面号
//返回值:返回0或1用于判断
int Max(int *cyclist, int n, int num){for(int i=0; i<n; i++)if(cyclist[i] > num)return 0;return 1;
}int Min(int *cyclist, int n, int num){for(int i=0; i<n; i++)if(cyclist[i] < num)return 0;return 1;
}

③全部代码

#include<iostream>
#include<cmath>
using namespace std;int Max(int *cyclist, int n, int num){for(int i=0; i<n; i++)if(cyclist[i] > num)return 0;return 1;
}
int Min(int *cyclist, int n, int num){for(int i=0; i<n; i++)if(cyclist[i] < num)return 0;return 1;
}
//0外越小,1内越大 
int SCAN(int *cyclist, int *cycorder, int n, int start, int dir){int sum, min, mid, index, tag[100] = {0};sum = 0;for(int j=0; j<n; j++){min = 9999;for(int i=0; i<n; i++){if(dir == 1 && cyclist[i] > start && tag[i] == 0){mid = cyclist[i] - start;if(mid < min){min = mid;index = i;}}else if(dir == 0 && cyclist[i] < start && tag[i] == 0){mid = abs(cyclist[i] - start);if(mid <min){min = mid;index = i;}}}if(dir && Max(cyclist, n, cyclist[index]))dir = 0;else if(Min(cyclist, n, cyclist[index]))dir = 1;sum += min;tag[index] = 1;cycorder[j] = cyclist[index];start = cyclist[index];}return sum;
}
int main(){int cyclist[100], cycorder[100], n, start, dir;cout<<"请输入磁臂初始移动方向(1向内,0向外):";cin>>dir;cout<<"请输入初始柱面和待执行柱面数量:";cin>>start>>n;cout<<"请输入待执行柱面:";for(int i=0; i<n; i++)cin>>cyclist[i];cout<<"磁头走过总道数为:"<<SCAN(cyclist, cycorder, n, start, dir)<<endl;cout<<"SCAN走道顺序为:";for(int i=0; i<n; i++){cout<<cycorder[i];if(i+1 != n)cout<<" -> "; }return 0;
}
/*
1
65 8
35 12 73 230 80 20 310 120
*/

3.运行结果
(1)移动臂向内:
在这里插入图片描述
(2)移动臂向外:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252664.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

磁盘寻道算法 电梯调度算法 C++实现

磁盘寻道算法 电梯调度算法 C实现 #include<iostream> using namespace std; #include<vector> #include<algorithm> compute(vector<int> v,int x,int d) {double w1;sort(v.begin(),v.end());if(d1){cout<<endl<<" 磁头从"…

电梯算法java_电梯调度算法总结

一 :任务要求 本次的程序任务和要求如上图所示,需要有4部电梯同时运行,每部电梯都有自己的限制且被同一控制器所控制,希望有图形显示效果,本次的任务我们组已经完成,关于编程的历程与总结现在就一一道来。 二:初步构想阶段 我们先尝试解决最核心的问题,即电梯的调度算法…

群控电梯调度算法

Java面试笔试面经、Java技术每天学习一点 公众号Java面试 关注我不迷路 1.传统电梯调度算法 1.1先来先服务算法(FCFS) 先来先服务(FCFS-First Come First Serve)算法&#xff0c;是一种随即服务算法&#xff0c;它不仅仅没有对寻找楼层进行优化&#xff0c;也没有实时性的特征&…

操作系统实验:驱动调度 模拟电梯调度算法 C语言实现

一&#xff1a;实验内容 模拟电梯调度算法&#xff0c;对磁盘进行移臂和旋转调度。 二.实验题目 (1).“驱动调度”进程和“接收请求”进程能否占有处理器运行&#xff0c;取决于磁盘的结束中断信 号和处理器调度策略。在实验中可用随机数来模拟确定这两个进程的运行顺序&…

Java实现电梯调度算法

Java实现电梯调度算法 电梯算法简介题目代码实现效果图 电梯算法简介 当磁头正在由里向外移动时&#xff0c;电梯调度算法所选择的下一个访问对象应是其欲访问的磁道&#xff0c;既在当前磁道之外&#xff0c;又是距离最近的。这样由里向外地访问&#xff0c;直至再无更外的磁道…

算法高级(39)-坐电梯时情不自禁想起的电梯调度算法实现原理

一、引言 现代社会中&#xff0c;不管你是在北上广、北海道、新加坡&#xff0c;或者是三四五六七八线的小城市&#xff0c;凡是有点规模的地方&#xff0c;高楼大厦都是比比皆是的。而在上下楼的时候&#xff0c;不可避免的会跟电梯打交道。而一般情况你也很少能心平气和地等…

电梯调度

在像芝加哥&#xff0c;纽约&#xff0c;东京&#xff0c;新加坡&#xff0c;香港等大城市里&#xff0c;每天都会有上百万的人通过电梯离开他们的大楼。但是我们却很少考虑电梯是如何调度来提供服务的&#xff0c;尤其是在人流高峰期&#xff0c;这个时候办公楼里的大多数人都…

电梯调度算法

磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器&#xff0c;担负着繁重的输入输出任务、在多道程序设计系统中&#xff0c;往往同时会有若干个要求访问磁盘的输入输出请求等待处理&#xff0c;这时我们就需要采用一种合适的调度算法来使…

苹果主屏幕按钮怎么设置_苹果手机屏幕变大怎么恢复

如果苹果手机屏幕放大起来&#xff0c;其实只要同时使用三个手指快速连续点击手机屏幕两次&#xff0c;手机界面就会恢复正常。还可以在【设置】-【通用】-【辅助功能】中将【缩放】开关关闭。在【辅助功能】中【更大字体】选项中可以调整字体的大小。具体介绍如下&#xff1a;…

苹果主屏幕按钮怎么设置_Mac小技巧 Mac屏幕旋转怎么设置

相信不少的Mac用户在躺下看电子书或者电影的时候&#xff0c;都希望可以将Mac的电脑屏幕进行旋转&#xff01;其实&#xff0c;这个操作是可以实现的呢&#xff01;那么&#xff0c;你知道Mac屏幕旋转怎么设置吗&#xff1f;想要知道答案的话就快来阅读下面的文章吧&#xff01…

苹果屏幕旋转怎么设置_iPhone12屏幕供应商是谁 苹果12屏幕怎么查看是哪家

苹果iPhone12系列手机在10月份正式发售上市&#xff0c;今年的iPhone12全系列都使用了OLED屏幕&#xff0c;官方将这块屏幕称之为超视网膜 XDR 显示屏&#xff0c;那么今年的iPhone12系列屏幕供应商有哪些&#xff0c;怎么分辨自己手上的iPhone12屏幕来自哪家公司呢&#xff0c…

苹果手机投屏软件_苹果手机怎样投屏到笔记本?

注&#xff1a;本文转载自网络&#xff0c;不代表本平台立场&#xff0c;仅供读者参考&#xff0c;著作权属归原创者所有。我们分享此文出于传播更多资讯之目的。如有侵权&#xff0c;请在后台留言联系我们进行删除&#xff0c;谢谢&#xff01; 经常用手机的小伙伴都知道&am…

怎么设置苹果手机的小圆点_苹果屏幕旋转怎么设置?关于苹果手机设置的一些小技巧...

苹果屏幕旋转怎么设置&#xff1f;在平常使用手机观看视频的时候&#xff0c;很多人希望手机屏幕可以自己旋转为横屏状态&#xff0c;在使用微信聊天的时候再自动转为竖屏&#xff0c;这种切换可以直接利用控制中心的一个功能来实现。 如何开启苹果手机的屏幕旋转&#xff1f;首…

苹果屏幕使用时间怎么设置_苹果手机屏幕不能旋转怎么办

很多刚刚接触苹果手机的人&#xff0c;可能不知道怎么使用苹果手机。那么苹果手机屏幕不能旋转怎么办呢&#xff1f;下面就让小编来告诉大家吧&#xff0c;欢迎阅读。 1、苹果手机页面未锁定的情况下从屏幕底端向上滑动&#xff0c;弹出小界面窗口。 2、可以看到小窗口顶部左端…

linux屏幕旋转后触控不准,手机重力感应失效解决方法 不能自动旋转屏幕怎么设置...

如今手机已经成为人们生活中必不可少的一个工具了&#xff0c;在使用过程也常常会遇到各种各样的问题&#xff0c;比如当手机重力感应失效的时候应该怎么解决呢&#xff0c;手机不能自动旋转屏幕要怎么设置&#xff0c;针对这个问题下面就为大家带来最新解决方法&#xff0c;希…

苹果6怎样打开html,苹果6屏幕旋转怎么设置 怎么开启和关闭【图文】

手机在使用的过程中&#xff0c;通常都会有两种状态&#xff0c;横屏与竖屏&#xff0c;大家的使用习惯不一样&#xff0c;所喜欢的状态也不一样&#xff0c;而且手机都会有屏幕自动旋转的情况&#xff0c;它会根据手机的摆放状态自己切换&#xff0c;比较方便大家使用&#xf…

会员管理系统,建议收藏!

你见过会员管理系统吗&#xff1f;在一些线下的美容院&#xff0c;健身房&#xff0c;理发店&#xff0c;往往会有办理会员这样的需求&#xff0c;所以会员管理系统应运而生。那会员管理系统有哪些作用呢&#xff1f; 会员卡&#xff1a;无需填写信息、无需实体会员卡&#xf…

会员卡系统的管理运营

下面的是会员系统的源代码和DOS命令的运行

会员卡应用管理系统源码 支持收银+积分管理+商城营销功能 含详细搭建教程

分享一个会员卡应用管理系统源码&#xff0c;收银积分管理商城营销系统源码&#xff0c;含完整的程序包和搭建教程。 系统功能一览&#xff1a; 1、精简强悍&#xff0c;会员卡&#xff0c;积分&#xff0c;在线充值&#xff0c;商家核销&#xff0c;在线下单&#xff0c;优惠…