停车场管理(栈和队列的应用)
[问题描述]
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
[实现提示]
以栈模拟停车场,以队列模拟车场外的便道。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停车不收费)。栈以顺序存储结构实现,队列以链表结构实现。
设计思路。
主要要定义的参数值,定义一个停车的结构体CarNode,定义一个车的StackCar栈用来存储停车的信息,定义停车便道的队QueueNode用来存储信息,再定义一个队QueueCar。
#define Max 3 //停车最多的数量,数量可以自己设计
#define price 0.10 //收费价格
typedef struct //停车时间
{
int hour;
int min;
}Time;
typedef struct Node
{
char num[20]; //汽车牌号码
Time reach; //到来时间
Time leave; //离开时间
}CarNode;
typedef struct stackNode
{
CarNode *data[Max+1]; //每辆车辆的信息
int top;
}StackCar;
typedef struct LinkNode//车场外的便道车辆的信息
{
CarNode *data;
struct LinkNode *next;
}QueueNode;
typedef struct
{
QueueNode *front; //头指针
QueueNode *rear; //尾指针
}QueueCar;
构建方法
int InitStack(StackCar *S)//初始化栈
int InitQueue(QueueCar *Q)//初始化队列
int Push(StackCar *S,CarNode *P)//进栈操作
int PushStack(StackCar *S,CarNode *P)//出栈
int Pop(StackCar *S,CarNode *(&P)) //汽车出站操作,即出栈
int EnQueue(QueueCar *Q,CarNode *P)//进队列操作
int OutQueue(QueueCar *Q,CarNode *(&q))//出队列操作
void InCarPark(StackCar *E,QueueCar *Q )//进站停车
void PriceCount(CarNode *p,int location)//计算费用,计费的思路需要思考下,要注意该车是否过夜停车,相减获得的时间要保证不会出错。
void OutCarPark(StackCar *Out,StackCar *Temp,QueueCar *Q) //驶出停车场
void menu()//操作菜单
int main()
源代码(如下)
#include<iostream.h>
#include<stdlib.h>
#include<malloc.h>
#define Max 2 //停车最多的数量
#define price 0.10 //收费价格
typedef struct //停车时间
{
int hour;
int min;
}Time;
typedef struct Node
{
char num[20]; //汽车牌号码
Time reach; //到来时间
Time leave; //离开时间
}CarNode;
typedef struct stackNode
{
CarNode *data[Max+1]; //每辆车辆的信息
int top;
}StackCar;
typedef struct LinkNode//车场外的便道车辆的信息
{
CarNode *data;
struct LinkNode *next;<