日期:2014-05-20  浏览次数:20701 次

电梯调度算法模拟的实现
课程设计我选的题目是这个,但是思路不是很清晰,有高手能给我思路或代码不?


原题描述如下:
说明:电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;如果电梯向下运动,则刚好相反。
题目难度:较难
设计要求:模拟多人在不同楼层同时要求到各自目的地时电梯的响应顺序,要求使用C语言编程,定义合适的数据结构。最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。
设计提示:可以用一个结构体表示乘电梯的人,其中内容包括人的姓名、起始楼层、目的楼层;建立一个结构体的数组模拟当前所有需要乘电梯的人。把这个结构体数组作为程序的输入,通过对数组中每个人的起始楼层和目的楼层进行分析,确定每个人进出电梯的顺序,并打印输出。
比如: 当前楼层是4,结构体数组中共有3个人,A:7 → 3 B:6→10 C:7→8;
 则输出应该是: 当前楼层为6,B进入
  当前楼层为7,C进入
  当前楼层为8,C出去
  当前楼层为10,B出去
  当前楼层为7,A进入
  当前楼层为3,A出去


------解决方案--------------------
这个问题其实不算复杂,电梯运行做成一个单独线程,每次根据方向移动一层,当到达这一层的时候做如下判断
1: 是否有人要出去
2: 是否有人要进入
3: 是否已经结束了(所有人都已经到达目的地了)
4: 电梯是否要改变运行方向
5: 如果以上都不是,则直接沿着当前方向到下一个楼层

以上线程运行,如果有人进出打印出结果就可以了。


可以另外写一个线程进行随即数据产生,比如每隔1s产生一个人,从一个随即的楼层A到另外一个楼层B(A!=B && A>0 && A<=N && B>0 && B<=N) (N为总楼层)