- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验报告二-停车场管理【荐】.doc
实验2停车场管理
需求分析
输入的形式和输入值的范围:
第一次输入一个正整数,代表停车场容量大小。
以后每一次输入三个值,分别为字符、整形、整形,中间用逗号隔开。分别代表车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。其中字符必须为“A,D,E”三者之一。
输入格式为:“(‘A’,1,5)”、“(‘D’,1,15)”。
不对非法输入做处理,即假设输入都是合法的。
输出的形式:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
程序所能达到的功能:
对于用户输入的车辆信息,可以输出该车的停车位置或者停车时间及应缴费用。
测试数据:
请输入停车场容量2
A,1,1
车停在停车场第 1 个位置
A,2,2
车停在停车场第 2 个位置
A,3,3
车停在便道第 1 个位置
D,1,4
停车时间:3 缴纳费用:¥6
D,2,5
停车时间:3 缴纳费用:¥6
A,5,5
车停在停车场第 2 个位置
E,0,0
概要设计
抽象数据类型的定义:
由于每一辆车包含多种信息。所以定义一个Data类来存储汽车的“来去、车牌号,时间”信息。
class Data //每辆车的信息类
{
public:
int license;//车牌号码
int arrive;//到达时间
};
用栈模拟停车场,其ADT如下:
ADT stack
数据对象:Data类型
数据关系:线性关系
基本操作:
bool push(const Dataitem)//入栈 bool pop(Data item)//出栈
bool topValue(Data it)//顶层元素值
算法的基本思想:
1、
对于指定大小的停车场,其只有一端出口,先进后出,用栈存储;
超过停车场容量的车停在便道上,先进先出,用队列存储;
当汽车离开时,在它之后进入的车辆必须先退出再按原次序进入车场,需要一个临时栈存储。
2、
每进入一辆车,进行入栈操作,即停车场;如果入栈不成功则入队列,即便道。
每离开一辆车:
要对在该车之后进入的车辆进行弾栈操作,出栈的元素依次存入另一个临时堆栈,即为离开车辆开道。
在对该车进行出栈操作后,再将临时堆栈的元素弹回原栈。
通过离开时间与该车储存在Data中的到达时间差获得停车时间以及费用(费用的计算根据2元/小时)。
此时如果队列不为空,表明便道上有车待入,修改此待入车辆的到达时间为离开车的离开时间,并进行入栈操作。
当输入不为‘E’时,循环进行上述操作。
详细设计
实现概要设计中定义的所有数据类型:
分别用字符型、整形、整形存储用户的输入,并将相应数据存入Data类。
class Data //每辆车的信息类
{
public:
int license;//车牌号码
int arrive;//到达时间
};
class Stack//堆栈,模拟停车场
{ private:
int size;
int top;
Data *listArray;
public:
Stack(int sz){size=sz;top=0;listArray=new Data[sz];}
~Stack(){delete []listArray;}
bool push(const Dataitem)//入栈
{
if(top==size)return false;
else
{
listArray[top++]=item;
return true;
}
}
bool pop(Data item)//出栈
{
if(top==0)return false;
else
{
文档评论(0)