




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实习报告题目:停车场管理班级:计算机学院12052313 姓名:卢魏旭 学号:12051521 完成日期:2012年10月一、 需求分析以栈模拟停车场,以队列模拟停车场以外的便道,每一组输入的数据包括三个数据项:汽车“到达”或“离去”的信息,汽车牌照号码以及到达或者离去的时刻,对每一组数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上不计费),栈以顺序结构实现,队列以链表结构实现。附加要求,便道上的车可以直接开走,此时排在它前面的汽车先让开,再一次排到队尾。二、 概要设计为实现上述程序功能,以顺序存储结构实现栈的功能,也就是停车场,栈的抽象数据类型定义为:ADT Stack数据对象:D=a|ai-ElemSet,i=1,2,3n数据关系:R1=|ai-1,ai -D,i=1,2,3n基本操作:creatstack(&S)操作结果:构造一个空栈Pushstack(&S,num,time,&pos)初始条件:栈S存在操作结果:将车牌号及时间入栈,返回位置posPopstack($S,num,&time)初始条件:栈S存在操作结果:取出栈内元素此外以链式存储结构实现队列的功能,也就是便道队列的抽象数据类型定义为:ADT Quene数据对象:D=a|ai-ElemSet,i=1,2,3n数据关系:R1=|ai-1,ai -D,i=1,2,3n基本操作:creatquene(&Q)操作结果:建立一个空队列Pushquene(&Q,num)初始条件:队列Q存在操作结果:将一个元素入队列Popquene(&Q,num)初始条件:队列Q存在操作结果:从队列中取出一个元素三、 详细设计#include#include#include#define stacksize 2typedef struct Stackint time;int number;*Stackptr;typedef struct linkstack Stackptr base;Stackptr top;typedef struct Queneint time;int number;struct Quene *next;*Queneptr;typedef struct linkqueneQueneptr front;Queneptr rear;void creatstack(linkstack &S)S.base=(Stackptr)malloc(stacksize*sizeof(Stack);S.top=S.base;void creatquene(linkquene &Q)Q.front=Q.rear=(Queneptr)malloc(sizeof(Quene);Q.front-next=NULL;void showstack(linkstack S)while(S.top-S.base=stacksize-1)S.top-;printf(number=%d time=%dn,S.top-number,S.top-time);void showquene(linkquene &Q)Quene *q;if(Q.front!=Q.rear)q=Q.front-next;while(q-next!=NULL)printf(number=%d time=%dn,q-number,q-time);q=q-next;printf(number=%d time=%dn,q-number,q-time);elseprintf(便道上没有车辆!n);int Pushstack(linkstack &S,int num,int time,int &pos) /入停车场if(S.top-S.base=stacksize)return 0;elseS.top-number=num;S.top-time=time;S.top+;pos=S.top-S.base;return 1;void stacktostack(linkstack &outS,linkstack &inS) /*出停车场时先把后进来的车开到一个临时栈内*/inS.top-number=outS.top-number;inS.top-time=outS.top-time;int Popstack(linkstack &S,int num,int &time0) /出停车场int flag=0,i,m=S.top-S.base;linkstack S1;creatstack(S1);S.top-;for(i=0;inumber=num)flag=1;break;i+;if(flag)time0=S.top-time; /找到后将刚进来的时候的时间赋值给time0while(S1.top!=S1.base)S1.top-;stacktostack(S1,S);S.top+;stacktostack(S1,S);return 1;elseS.top=m+S.base;return 0;void Pushquene(linkquene &Q,int num,int time,int &pos) /停车场满后入便道Quene *p;linkquene q=Q;p=(Queneptr)malloc(sizeof(Quene);p-number=num;p-time=time;p-next=NULL;Q.rear-next=p;Q.rear=p;p-next=NULL;pos=0;while(q.front-next!=NULL)pos+;q.front=q.front-next;void Popquenetostack(linkquene &Q) /将便道上的车开出来开进停车场,其实就是删除队列中的对头元素Quene *p;p=Q.front-next;Q.front-next=p-next;if(Q.rear=p)Q.rear=Q.front;int Popquene(linkquene &Q,int num) /直接将车从便道上开走Quene *q,*p;q=Q.front-next;int flag=0,temp;temp=q-number;while(q-number!=num) Q.rear-next=q;Q.rear=q;q=q-next;if(temp=q-number)flag=1;break;Q.rear-next=NULL;if(flag)return 0; /未找到elseQ.front-next=q-next;if(Q.front-next=NULL)Q.front=Q.rear;return 1;void Input(linkstack &S,linkquene &Q,char ch,int num,int time)int pos,time0;switch(ch)case A:if(Pushstack(S,num,time,pos)printf(%d号汽车停在停车场里的第%d个车位上n,num,pos);break;elsePushquene(Q,num,time,pos);printf(%d号汽车停在便道上的第%d个车位上n,num,pos);break;case D:if(Popstack(S,num,time0)printf(%d号汽车出停车场,,num);printf(n停车时间:o%d分钟n停车费用为%g元an,time-time0,(time-time0)*0.05);if(Q.front!=Q.rear)Quene *q;q=Q.front-next;while(Pushstack(S,q-number,q-time,pos)&Q.front!=Q.rear) /当停车场没停满时S.top-;S.top-time=time; /进停车场再计时printf(%d号汽车出便道进入停车场,停在第%d个车n,S.top-number,pos);S.top+;Popquenetostack(Q); /让便道上的车出列进入停车场/showstack(S);elseif(Q.front!=Q.rear&Popquene(Q,num)printf(便道上的号车开走了n,num);else printf(停车场和便道上均无此车n);break;case E:break;printf(n);void main()char c=X;char cs10;int number,time;linkstack S;linkquene Q;creatstack(S);creatquene(Q);while(c!=E)printf(输入操作数n);scanf(%c%d%d,&c,&number,&time);gets(cs);if(c!=A&c!=D&c!=E)printf(输入有误!n);continue;printf(n);Input(S,Q,c,number,time);printf(结束!n);showstack(S);system(pause);四、 调试分析1、本次作业是一个简单的停车场管理,涉及到停车场停车开车以及便道上停车的问题,在Input()函数中调用根据输入的信息调用各个函数进行相应的分析,刚开始遇到很多问题,比如在出栈和入栈时,由于栈内存放的是结点的指针,而我当时直接是用S.top=p来赋值,导致在从停车场开车走时找不到车辆的车牌号和对应的时间,返回给我的是一串地址,后来明白是要对S.top所指结点的各个元素分别赋值才可以。2、本次程序没有太多出色的算法,基本上就是要对栈和队列的熟练使用,明白其用法,程序中的stacktostack()比较重要,在停车场中开车走时要使用一个临时的栈来存放场内的车,然后再按顺序放回去。3、对指针的掌握熟悉了一点,栈和队列都采用指针来操作,每一个栈内存放一个车辆结点的地址信息,使用起来非常的方便。4、本程序中除了基本操作的算法以外,只有一个Input()函数,其时间复杂度在停车场开车后从便道入场这里最大为O(n2),其他算法都是对栈或者队列的遍历,为O(n);5、经验体会,这种程序不复杂,就是需要仔细,在入队和出队以及入栈和出栈时很容易出错,当数据出现错误的时候,可以用一个遍历函数来检测栈内或队列内的数据。五、 用户手册1、 本程序的运行环境为DOS操作系统,执行文件为:停车场管理.exe。2、 进入演示程序后即显示文本方式的界面3、 按照A 1 1的形式输入信息A代表停车,D代表开车走,E代表结束输入,第一个数字代表车牌好,第二个数字代表停车或者开车走的时刻。回车即确定输入。每次输入后,若是停车,则显示停车的位置,若是开车走,则会显示车是从停车场内开走还是从便道上开走,若是从停车场内开走,显示停了多长的时间,以及相关的停车费用。六、 测试结果如图所示七、 附录源程序文件名清单:停车场管理.c+ /主程序八、 验收过程1、 验收
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 签定朝鲜停战协议书模板
- 测绘业务分包协议书范本
- 燃气安全合同协议书模板
- 深圳农民房交易协议合同
- 活动承包合同协议书范本
- 汽柴油沥青销售合同范本
- 村委秸秆清运协议书范本
- 稠州银行资金托管协议书
- 第三方委托装修协议合同
- 江苏商标申请代理协议书
- 国家重点研发计划“公共安全风险防控与应急技术装备”2023年立项项目
- YS/T 320-2014锌精矿
- 09S304 卫生设备安装图集
- 酸雾抑制剂化学品安全技术说明书
- 重点监管的危险化学品名录(完整版)
- 解三角形专题 - (解析版)
- 高等教育心理学学习提纲整理
- 桩基施工安全检查表
- 水玻璃有机酯自硬砂工艺简介
- 2022年公司管理制度发布流程
- XXX医院管道护理工作总结
评论
0/150
提交评论