【数据结构】c++实现简单的停车场
模拟停车厂管理
问题描述:
设停车厂只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走。
基本要求:
以栈模拟停车场,以队列模拟车场外的便道,按照从终端输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出车辆在停车场内或便道上的停车位置;若是车辆离去,则输出车辆在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。栈以顺序结构出现,队列以链表结构实现。
测试数据:
(1)连续有7辆车到来,牌照号分别为JF001、JF002、JF003、JF004、、JF005、JF006、JF007,前5辆车应该进入停车位1-5车位,第6、7辆车应停入便道的1、2位置上。
(2)(1)中的情况发生后,让牌照号为JF003的汽车从停车厂开走,应显示JF005、JF004的让路动作和JF006从便道到停车位上的动作。
(3)随时检查停车位和便道的状态,不应该出现停车位有空位而便道上还有车的情况。
(4)程序容错性的测试,当按键输入错误的时候是否有错误提示给用户指导用户正确操作,并作出相应处理保证程序健康的运行。
代码实现
#include <iostream>
#include<string>
using namespace std;
#define MAXSIZE 5
#define price 0.05 //方便更改价格
int k = 1;
//信息
typedef struct
{
int hour;
int min;
int locat;
string name;
}INF;
//栈
typedef struct
{
INF data[MAXSIZE];
int top;
}SeqStack, * LinkStack;
//队列
typedef struct node
{
INF data;
struct node* next;
}QNode;
typedef struct
{
QNode* front, * rear;
}LQueue;
//初始化队列
LQueue* Init_LQueue()
{
LQueue* q = new LQueue;
QNode* p = new QNode;
p->next = NULL;
q->front = p;
q->rear = p;
return q;
}
//入队
void enterline(LQueue* q, int hour ,int min,string name)
{
QNode* p = new QNode;
p->data.hour = hour;
p->data.min = min;
p->data.name = name;
p->data.locat = k;
p->next = NULL;
q->rear->next = p;
q->rear = p;
k++;
}
//判断队列是否为空
int EmptyLQue(LQueue* q)
{
if (q->front == q->rear)
return 0;
else
return 1;
}
//出队
QNode* outline(LQueue* q)
{
QNode* p;
p = q