文档详情

数据结构停车场问题.doc

发布:2018-01-31约1.68万字共25页下载文档
文本预览下载声明
一、需求分析 车辆目前情况,用户通过键盘输入,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间(离开时间减去停在停车场的时间)和应交纳的费用(在便道上停留的时间不收费)。 2.依次输入一系列数据项(3个数据:第一个字符数据A或D表示车辆的到达或离开,第二整形数据表示车辆的车牌号码,第三个整形数据表示汽车到达或离去的时间),要求同一辆汽车到达的时间比离开的时间早。 3.测试数据 设停车场能容纳3辆车。 请输入车辆目前情况:A ,1,5 1车辆停入停车场1号。 请输入车辆目前情况:A ,2,6 1车辆停入停车场1号 2车辆停入停车场2号。 请输入车辆目前情况:A ,3,5 输入时间错误哦! 请输入车辆目前情况:A ,3,6 1车辆停入停车场1号 2车辆停入停车场2号。 3车辆停入停车场3号。 请输入车辆目前情况:A ,4,6 1车辆停入停车场1号。 2车辆停入停车场2号。 3车辆停入停车场3号。 4车辆在便道1号。 停车场已满。4车辆已放在便道。 请输入车辆目前情况:D ,1,7 1车辆已离开。时间5,收费10块。 2车辆停入停车场1号。 3车辆停入停车场2号。 4车辆停入停车场3号。 请输入车辆目前情况:E ,0,0 程序结束,感谢使用本程序哦。 本程序其他错误处理,没有设置处理。 二、概要设计抽象数据类型 基本操作对象是汽车类,包含来去信息,车牌号以及到达时间; Class Car//车辆信息 { Public: int Lincese;//车牌号 int ArriveTime;//到达时间 }; 便道先进先出的特性用队列是十分好的,但停车场有一个要求就是先进的要出去时,所有车辆都要让路,所以停车场用栈来模拟,便道使用队列来模拟; ADT StopStack 数据对象:D={|∈class car}; 数据关系:R1={ ai-1, ai | ai-1, ai∈D, i=2,...,n } 约定an 端为栈顶,a1 端为栈底。 基本操作: bool push(const Car item); Bool pop(Carit); bool topValue(Carit); int lengh()const{return top;} ADT StopQueue 数据对象:R={|∈class car}; 数据关系: R1={ a i-1,ai | ai-1, ai ∈R, i=2,...,n} 约定其中a1 端为队列头, an 端为队列尾 基本操作: bool enquene(constCaritem); bool dequene(Carit); bool frontValue(Carit); int length(); 算法的基本思想 (1)用一车类对象做中介,存储输入的要进停车场某一车量情况。 (2)当车进来的时候,首先让其按时间顺序依次入栈。(A为入栈,D为出栈,E为输入结束。) (3)当size=3即栈满时,让其在便道时按时间顺序依次入队; (4)当输入某元素要出栈时,让其上面元素依次压入另一个临时栈,并用通过当时车类的对象减去入栈时时间,算出停车时间,计算出停车费用,。在将临时栈中元素入栈。队列第一个元素入栈。 程序的流程 程序由三个模块组成: 输入模块:通过键盘输入某一车辆现在状态。 管理模块:首先判断第一个字符为A时,将该车类对象入栈,栈满时,在依次入队,当字符为D时,栈中元素出栈,记录当时出栈时间,得到停留时间,算出停车费用,若队中元素出列,无停车费用。 (3)输出模块:输出车站目前车辆情况。 三、详细设计 物理数据类型 数据类型(物理数据结构)的实现: Class Car//车辆信息 { Public: int Lincese;//车牌号 int ArriveTime;//到达时间 }; 模拟停车场的栈: Class StopStack: public car { { Private: int size; int top; Car* listArray; Public: StopStack(int sz=DefaultListSize) {size=sz;top=0;listArray=new Car[sz];} ~StopStack(){delete[]lis
显示全部
相似文档