一、实验目的
通过停车场管理的程序设计,帮助学生熟练掌握栈和队列的基本操作及用栈与队列解决具体问题的基本方法。
二、实验内容
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端);
若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可进入;
当停车场某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场;
汽车可以直接从便道上离开。离开时排在前面的车也应该为其让道,随后应回到原来的位置。
每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。交费按车的类型不同而不同,假定小车每小时2元,客车每小时3元,卡车每小时5元。停在便道上的车也要交费,假设其费用为停车场的车的1/3。
停车只限于当天0点至24点。
编写程序实现上面要求的停车场停车管理功能。
三、实验原理
1、停车场的数据逻辑表示
停车场包括正式的停车场和停车场外的暂停便道。按照要求,汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端),离开时只能从大门口离开。因此以栈模拟停车场比较合适。对栈的操作,汽车进入停车场是严格按入栈操作进行。汽车离开停车场时不一定是最接近大门的车辆,可以是停车场中的任何一辆车,所以汽车离开操作不是严格的出栈操作。但汽车离开停车场后的数据仍然按栈的方式进行组织。
由于暂停便道的车辆当停车场有空位时要进入停车场,而进入停车场的顺序是按进入便道的先后顺序进行的。因此用队列模拟停车场外的暂停便道比较恰当。
假设停车场最多可停放6辆车,初始为空,有连续9两车进入车场,则其中6辆车停在停车场,另有3辆车停在便道上,如图3-1所示。
按照从终端读入的输入数据进入模拟管理。每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息
汽车牌照号码
汽车到达或离去的时刻(以小时为单位记数)
对每一组输入数据进行操作后的输出信息为:
若是车辆“到达”,则输出汽车在停车场内或便道上的停车位置。
若是车辆“离去”,则输出汽车在车场内停留的时间和应交纳的费用。
2、汽车从停车场离开的处理
当汽车从停车场离开时,若该车就是最靠近大门的车(在栈中处于栈顶位置),则直接开出停车场。若不是最靠近大门的车(不在栈顶),则处在靠近大门的车(栈顶位置)要让道。当要离开的车离开停车场后,让道的车又要按原来的顺序进入停车场。按照让道离开顺序和重新进入停车场的顺序,符合栈操作的规律,所以需要设置一个辅助栈来保存让道的车辆信息。
对于上面车辆离开停车场的两种情况,若暂停便道上有车,则便道上排在最前面的车要进入停车场。
假设4号车要离开车场,则应按6号车、5号车的顺序依次进入让路便道。当4号车开走后,应按5号车、6号车的顺序依次进入停车场。这时停车场空出一个位置,然后7号车进入停车场。图3-2表示4号车正在离开时的情况。
3、车辆从暂停便道离开的表示
假设车辆只能向前开,而不是后退的形式离开便道。当汽车从便道离开时,若该车排在最前面,则可直接离开。若不是排在最前面,则处在前面的车要让道。让道的方式有两种方案:
(1)前面的车直接开到后面去排队。如果司机都希望把汽车开到停车场停靠,显然这种处理方式式不公正的。
(2)让道的车让道后回到原来排队位置(这是比较公正的处理方法)。但要实现这种处理方式必须另开辟场所停放让道车辆,在处理相关数据时,必须另设一辅助数据结构来存放前