C++数据结构停车场管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告
实验题目:停车场管理
学生姓名:
班级:
学号:
问题描述
设有一个停车场,它是利用一个南北向的狭窄通道建成,北端封闭,大门在最南端。最先到达的汽车停放在最北端,后面到达的汽车从北至南依次顺序停放。停车场只能停放n 辆汽车。当停车场停满n辆车后,后面到达的汽车只能在门外的便道上等候。一旦有汽车开走,便道上等候的第一辆车就可以开入停车场停放。当停车场内某辆汽车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该车开出大门外,其他汽车再按原次序返回车场。每辆停放在车场内的汽车在离开时必须按它停放时间的长短交纳费用。
例题分析
每到达一辆汽车,先检查停车场栈是否已满,若未满则该车进入停车场停放(入栈操作),并将该车的车号和停放时刻记录在停车场栈的相应元素中,同时显示该车在停车场内的停放位置。反之,若停车场已满,则该车排到便道上等候的汽车队列最后(入队列操作),并将该车的车号信息记录在汽车队列的相应结点内,同时显示该车在便道上的停放位置。
若要取一辆汽车,则需依次进行下述操作:将阻挡在它后面的汽车退出(停车场栈的出栈操作),并将这些汽车临时存放在另一个辅助栈中(辅助栈的入栈操作);开走要取的汽车(停车场栈的出栈操作),并显示该车应交纳的费用;依次从辅助栈中开出汽车(辅助栈出栈操作),开回停车场中(停车场栈的入栈操作);这时停车场已有一个空车位,便道上等候的第一辆汽车则可以开进停车场内停放(汽车队列的出队列操作和停车场栈的入栈操作)。
程序源代码
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define Max_Size 2//停车的最大容量
#define HourFare 2 //每小时的停车费用
int CountForStack=0; //栈里现有的车数
int CountForQueue=0; //排队等候的车数
typedef struct
{
char Condition;//到达或者离开的状态
int Arrivetime;//到达时间,默认为-1,表示没有到达int Leavetime;//离开时间,默认为-1,表示没有离开int License;//车牌号
}
CarNode;//保存每辆车的信息
typedef struct//栈的定义
{
CarNode *base;//栈底指针
CarNode *top;//栈顶指针
int Stacksize;//栈的最大容量
}
CarStack;
typedef struct QNode
{
char Condition;//到达或者离开的状态
int Arrivetime;//到达时间,默认为-1,表示没有到达int Leavetime;//离开时间,默认为-1,表示没有离开int License;//车牌号
QNode *next;
}
QNode;
typedef struct//队列的定义
QNode *front;//对头指针
QNode * rear;//队尾指针
}
Queue;
bool InitStack(CarStack &S1)//初始化栈S1
{
S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode));
if(!S1.base)
{
cout<<"栈S1 内存分配失败"< return false; } S1.top=S1.base; S1.Stacksize=Max_Size; return true; } bool InitQueue(Queue &Q) { Q.front=(QNode*)malloc(sizeof(QNode)); if(!Q.front) { cout<<"队列Q 内存分配失败!"< return false; } Q.rear=Q.front; Q.front->next=NULL; return true; } bool EnQueue(Queue &Q,QNode &e)//插入元素e 为Q 的新的队尾元素 QNode *p=(QNode *)malloc(sizeof(QNode)); if(!p) { cout<<"p 内存分配失败"< return false; } p->Arrivetime=e.Arrivetime; p->Leavetime=e.Leavetime; p->Condition=e.Condition; p->License=e.License;//将e 赋给P p->next=NULL; Q.rear->next=p; Q.rear=p; return true; } bool DeQueue(Queue &Q,QNode &t)//出队列函数{ if(Q.front==Q.rear) { cout<<"队列为空!"< return false; } QNode *p=Q.front->next; t.Arrivetime=p->Arrivetime; t.Condition=p->Condition; t.Leavetime=p->Leavetime; t.License=p->License; Q.front->next=p->next; if(Q.rear==p)