问题描述
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
算法思想
题目需要用到的知识就是出栈入栈和出队入队的模拟。需要两个栈和一个队列,一个栈AS用来储存停车场内车的信息,另一个栈BS为临时栈,用来储存前面车要离开,后面的退出等待的车的信息。队列储存便道的车。停车操作时,若AS不满可以直接存入,并从键盘输入停车时间,记录停车位置;AS满了之后,车辆进入队列CQ,记录停车位置。取车操作时,所取车后面的车辆先进入BS,然后删去AS中要取的车,BS中的车入AS栈,便道的车辆也随其后进入AS。
算法设计
1、菜单显示void menu()——供用户选择的功能菜单。
2、输出停车场信息void Indisplay(CarStack AS)——若停车场暂无停车信息,则给出提示;否则输出停车位置、车牌号和停车时间。
3、输出便道信息void Outdisplay(CarQueue CQ)——若便道暂无车辆等候,则给出提示;否则输出停车位置和车牌号。
4、栈与队列的初始化Status Init(CarStack &AS,CarStack &BS,CarQueue &CQ)——为AS、BS分配空间,对AS、BS、CQ初始化。
5、停入便道Status Pushroad(CarQueue &CQ)——记录车辆的车牌号,便道车辆总数加1,此时的车辆总数也即为该车辆在便道的位置。
6、进入临时栈Status Inbs(CarStack &AS,CarStack &BS,int a)——用一层for循环解决元素从AS出栈,进入BS。
7、出临时栈Status Outbs(CarStack &AS,CarStack &BS)——用一层for循环解决元素从BS出栈,进入AS。
8、便道车进入停车场Status Qtos(CarStack &AS,CarStack &BS,CarQueue &CQ)——当CQ不空,AS不满的情况下,便道车进入停车场,从键盘输入停车时间,便道车辆总数减一,停车场总