background image

一.LOOK(查找)调度(电梯)电梯算法,操作系统学术名为 SCAN 算法。
磁臂仅移动到请求的最外道就回转。反方向查找服务。

1. 问题描述:

说明:电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那

个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。具体而言,如果电梯现
在朝上运动,

*

  如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方

的请求;如果电梯向下运动,则刚好相反。

*

 设计要求:模拟多人在不同楼层同时要求到各自目的地时电梯的响应顺序,要求使用C语

言编程,定义合适的数据结构。最后,需要说明设计思想,同时给出能够运行的源程序,并给
出对应的程序流程图。

设计提示:可以用一个结构体表示乘电梯的人,其中内容包括人的姓名、起始楼层、目的楼

层;建立一个结构体的数组模拟当前所有需要乘电梯的人。把这个结构体数组作为程序的输入,
 

*

  通过对数组中每个人的起始楼层和目的楼层进行分析,确定每个人进出电梯的顺序,并

 

打印输出。

2. 算法设计:
本程序用java语言、eclipse平台编写。

(1)算法思想:本算法只设计了一辆电梯,通过往返寻找方法,即先查询电梯运行方
向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运
行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。如果没有电
梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼驻停。同时,
电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。随后再搭
载去反方向的乘客。实现电梯的升降操作。

二.1.总程序流程图如下

2

判断电梯是否

已经到达该楼

判断电梯是否

已经逆向到达
楼层

键恢复为未按状

判断电梯是否

继续向下
x

判断电梯是否
已经到达该楼

将电梯的状态改变,即 lift.state!
=0 并且将该按钮键颜色改变

判断是否有
楼层键被按

则电梯仍然处于停止状态 , 即
lift.state=0

N

判断电梯是否

继续向下

判断电梯是否

继续向下
x

设置电梯为停止状态即 lift.state=0

设置电梯为向下

状态即
lift.state=1

判断电梯方向
是否是向上
x

电梯向下一层移
动 lift.number--;

判断电梯状态
是否等于 0
x

结束

判断电梯方向
是否向是上
x

电梯向上一层移动
lift.number++;

判断电梯是否
继续向上

判断电梯下方楼

层是否有键被按

x

设置电梯为停止状态即 lift.state=0

设置电梯为向下

状态即
lift.state=2

电梯是否在向上运动,
并且电梯是否已经到达

该楼层

电梯是否在向上运动,
并且电梯是否已经到达

该楼层