概要设计
- 以栈模拟停车场,以队列模拟停车场外的便道
- 自定义数据结构,顺序栈与链队列
停车场模拟的过程大致描述如下:
初始化停车场栈、辅助栈和队列;
从终端读入数据
If(到达)
{
判断停车场栈是否满;
若停车场栈不满
将车辆信息入停车场栈,输出车辆在停车场栈中位置;
否则
将车辆信息入队列,输出车辆在队列中位置;
}
else
{
在停车场栈内查找要离去的车辆
若找到
{
判断车辆所在位置
若在栈顶
{
将要出停车场栈车辆出停车场栈;
输出其在停车场内停留时间及要缴纳的停车费用;
若队列不空,将队头元素入停车场栈;
}
否则
{
将要出停车场栈车辆之前的车辆出停车场栈并压入辅助栈;
将要出停车场栈车辆出停车场栈;
输出其在停车场内停留时间及要缴纳的停车费用;
还原停车场栈内元素;
若队列不空,将队头元素入停车场栈;
}
}
否则
{
判断辅助栈是否为空;
若非空则将辅助栈内元素压入停车场栈;
判断队头元素是否为目标车辆
若是
将目标车辆出队;
否则
{
将目标车辆之前的车辆出队再入队;
将目标车辆出队;
继续将队列内车辆出队再入队,直至队头元素为初始状态;
}
}
- 编程要点及调试分析
- 对栈只能访问到其栈顶元素,因此在查找车辆时要借助辅助栈,将目标车辆之前元素全部压入辅助栈,待对目标车辆进行出栈操作之后,再将辅助栈内元素压入原栈。