【问题描述】
设停车场是一个可停放N辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停了n辆汽车,则后来的汽车只能在门外的通道上等候,一旦有车开走,则排在通道上的第一辆车即可开入;当停车场内每辆车要离开时,在它之后进入的车辆必须先退出停车场为其让路,待该辆车开出大门,其他车辆再按原次序进入停车场。请为停车场编写按上述要求进行管理的模拟程序。
【基本要求】
1、以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入输出数据序列进行模拟管理。栈以顺序结构实现,队列以链表结构实现。
2、输入的数据从文件中读出。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
3、对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。
4、程序以菜单方式运行。
【测试数据】
设N=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35)(‘D’,4,40)(‘E’,0,0)。其中‘A’表示到达,‘D’表示离去,‘E’表示输入结束。
【问题分析与编程思路】
1、程序要求数据从文件中读入,可以将文件中的信息全部存储到一个结构体中,这样结构体中的信息就是停车场中汽车进入和出来的信息.
2、本程序只是要求模拟整个停车场的过程,由这个基本要求可以知道,停车场由停车场栈来模拟,便道由便道队列模拟,退道由退道栈模拟。
3、每辆汽车就会有两个标记,一个标记是进入停车场时的脚标,这里记为n1,另一个是出停车场时的脚标,这里记为n2,
这些标记就是一辆车在结构体数组中的下表,例如:
(‘
A
’,
1
,
5
),(‘
A
’,
2
,
10
),(‘
D
’,
1
,
15
),(‘
A
’,
3
,
20
),(‘
A
’,
4
,
25
),(‘
A
’,
5
,
30
),(‘
D
’,
2
,
35
)(‘
D
’,
4
,
40
)
第一辆车的进停车场栈的下表为0,出停车场的下标是2;
第二辆车的进停车场栈的下标为1,出停车场的下标为6;
第三辆车的进停车场栈的下标为3,出停车场的下标没有;
第四辆车的进停车场栈的下标为4,出停车场的下标是7;
第五辆车的进停车场栈的下标为5,出停车场的下标没有;
其实标记就是结构体数组的脚标。
在模拟的过程中,
遇到标记为‘A’, 表示该车子进入停车场,它的脚标n1进停车场栈,如果停车场栈满了,就n1进入便道队列,
遇到标记为‘D’,表示该车子出停车场,通过车子出停车场的标记n2找到入停车场标记n1,n1就要出停车场栈,如果n1不是栈顶元素,将停车场栈中的元素出栈,一直到n1为栈顶元素,n1出栈,停车场栈中出来的元素进入退道栈,不包括n1。.
【程序】
见上传的资源