停车场管理(栈和队列的应用)
[问题描述]
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
[实现提示]
以栈模拟停车场,以队列模拟车场外的便道。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停车不收费)。栈以顺序存储结构实现,队列以链表结构实现。
[设计思路]
- 进行结构体以及栈和指针的声明
- 分别构造栈和队列作为停车场和便道
- 栈和队列的入栈和出栈,进队列和出队列代表停车场进出车辆和便道的进出车辆。
- 在主函数中进行各个函数的调用
[代码及注释]
#include<iostream>
#include<cstring>
using namespace std;
#define MAXSIZE 3 /*停车场最大停车数*/
#define Price 0.02 /*停车场每分钟收费价格*/
int flag=0; /*判断程序是否结束*/
//结构
typedef struct{
string id; /*车牌号*/
int stime; /*到达时间*/
}Car; /*车辆类型*/
typedef struct{
Car c[MAXSIZE+1]; /*MAXSIZE辆车,0号不用*/
int top; /*下标代替指针*/
}SqStack; /*顺序栈,表示停车场*/
typedef struct QNode{
Car c; /*一辆车*/