数据结构--停车场管理

上传人:油条 文档编号:113795661 上传时间:2019-11-09 格式:DOCX 页数:6 大小:49.09KB
返回 下载 相关 举报
数据结构--停车场管理_第1页
第1页 / 共6页
数据结构--停车场管理_第2页
第2页 / 共6页
数据结构--停车场管理_第3页
第3页 / 共6页
数据结构--停车场管理_第4页
第4页 / 共6页
数据结构--停车场管理_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《数据结构--停车场管理》由会员分享,可在线阅读,更多相关《数据结构--停车场管理(6页珍藏版)》请在金锄头文库上搜索。

1、实习报告题目:停车场管理 姓名:袁韬博 学号:16030120021 完成日期:2017.10.23一、 需求分析1. 本题目要求建立一个可指定长度的栈,和长度可变化的队列,以当作停车场和便道的车的存放。2. 本题目要求在停车场的车离开时,便道的车按照先后顺序进入一辆,并开始于此时记录时间。3. 在本题目之中在便道的停车不计费用,在此题中应判断在停车场还是在便道的信息。4. 本题目要求根据数据的第一位数据判断进入还是离开,根据要求输出信息。5. 程序执行命令为:1.存入车辆时输出停车信息2.车辆离开时输出停车时间和应缴纳费用 3.输入E时表示结束。6. 测试数据:n=2,m(每小时停车费用)=

2、3,(A,1,5)(A,2,10)(D,1,15)(A,3,20)(A,4,25)(A,5,30)(D,2,35)(D,4,40)(E,0,0)其中A表示为Arrival(到达),D表示为Departure(离开),E表示为End(结束)。二、 概要设计1. 设定栈的抽象数据类型定义数据对象 :D=ai|aiSStop,i=1,2,3,n数据关系 :R=|aiD, i=1,2,3,n 基本操作:initStack(&S,d)操作结果:建立一个长度为d的空栈Push(&S, &e, &d)初始条件:栈已存在,长度为d操作结果:如栈已满返回false,否则将e,压入栈中,返回truePop(&S,

3、 e)初始条件:栈已存在操作结果:如栈为空返回false,否则弹栈入e,返回true2. 设定队列的抽象数据类型定义数据对象 :D=ai|aiSStop,i=1,2,3,n数据关系 :R=|aiD, i=1,2,3,n *SQTypeInit()操作结果:建立一个空队列InSQType(*q, &data)初始条件:队列已存在操作结果:将data压入队列之中*OutSQType( *q)初始条件:队列已存在操作结果:弹出队列,返回其指针。3. 程序包含6个模块1) 主程序模块:包含栈与队列的对象建立,输入值的判断以及函数的实现 2) 栈模块:实现停车场抽象数据类型3) 队列模块:实现便道抽象数

4、据类型4) 函数模块:实现数据的输入,进入和离开的弹栈与压栈及输出操作三、 详细设计#include#include#include using namespace std;typedef struct /定义车辆的结构体char a; /进入与离开信息int b; /车牌号int c; /进入或离开时间int d; /在停车场或便道的序号int e; /在停车场为1,在便道为0SStop;typedef struct /定义栈结构体SStop *base; /定义栈底指针SStop *top; /定义栈顶指针SStop a; /定义栈元素Stop; struct SQType /定义队列结构

5、体 SStop data100; /分配队列neicun int head; /定义队列头 int tail; /定义队列尾;SQType *SQTypeInit()/建立空队列 SQType * q; /定义队列指针 if(q=new SQType) /建立队列 q-head=0; /将队列的头的定为0 q-tail=0; /将队列的尾的定为0 return q; /返回队列指针 else return NULL; /建立不成功返回NULL int InSQType(SQType *q,SStop &data)/入队列操作 if(q-tail=100) /如果队列满返回队列已满!操作失败!

6、cout队列已满!操作失败!head+q-tail; q-dataq-tail+=data; return 1; SStop *OutSQType(SQType *q)/出队列操作 if(q-tail=q-head) /如果队列为空返回NULL return NULL; else /如果队列不为空出队列并返回此数据指针 return &(q-dataq-head+); bool initStack(Stop &S,int d) /建立空栈S.base=(SStop*)malloc(d*sizeof(SStop); /分配长达d的内存if(!S.base)return false; /分配不成功

7、返回falseS.top=S.base; /是栈顶指针等于栈底指针return true; /建立成功返回turebool Push(Stop &S,SStop &e,int &d) /压栈操作if(S.top-S.base=d)return false; /如果栈满返回falseif(S.top=S.base)e.d=1; /如果栈为空将e的停车位置设为1else e.d=1+S.top-S.base; /设置e的停车位置*S.top+=e; /将e压入栈中return true; /返回truebool Pop(Stop &S,SStop &e) /弹栈操作if(S.top=S.base)

8、return false; /如果栈为空返回falsee=*-S.top; /弹栈并将其值赋给ereturn true; /返回trueint Scanf(SStop &e) /输入数据操作cine.a; /输入操作cine.b; /输入车牌号cine.c; /输入进入或离开时间e.d=0; return 0;int Arrival(Stop &stop,SQType *wait,SStop &e,int &n,SStop a,int &y)/进入操作if(Push(stop,e,n) /如果栈不满将e压入栈e.e=1; /将判断数据设置为1ay=e;y+; /将数据存入数组coute.b车停

9、在停车场的e.d位置endl ;/打印停车位置else /如果栈满将e入队列 InSQType(wait,e);e.e=0; /将判断数据数值为0ay=e;y+; /将数据存入数组coute.b车停在便道的e.d位置endl; /打印停车位置int Departure(Stop &stop,SStop a,Stop &wait1,SQType *wait,SStop &e,int &n,int &y,int &rt)/离开操作int o=0;SStop *q,u,mn,*kl;for(int i=0;iy;i+) /应用循环判断停车时间if(e.b=ai.b)e.e=ai.e;e.d=ai.d

10、;o=e.c-ai.c; int ui=0;if(e.e=0)cout该车在停车场停车时间为:0 费用为0head1) /将e之前的数据出队列再入队列kl=OutSQType(wait);InSQType(wait,*kl);if(wait!=NULL)OutSQType(wait); /将e出队列while(wait-tail-e.d-wait-head1&wait!=NULL)/ 将e之后的数据出队列再入队列mn=*OutSQType(wait);InSQType(wait,mn);if(e.e=1)cout该车在停车场停车时间为:o 费用为:o*rtendl; /如果在停车场之中,计算费

11、用并输出while(uin-e.d) /将e之后的数据出栈Pop(stop,u);Push(wait1,u,n);ui+;Pop(stop,mn); /将e出栈while(wait1.top!=wait1.base)/将先前出栈数据压入栈中Pop(wait1,u);Push(stop,u,n);q=OutSQType(wait); /从队列中出一个数据if(q!=NULL) Push(stop,*q,n); /将q压入栈中for(int i=0;ib=ai.b)ai.e=1; /用循环将q的判断数据设置为1ai.c=e.c; /用循环将q的如停车场时间设为e离开时间return 0;int main() /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号