ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:253.47KB ,
资源ID:9984443      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9984443.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(停车场管理系统实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

停车场管理系统实验报告.docx

1、停车场管理系统实验报告华北水利水电学院 数据结构 实验报告20112012学年 第 二 学期 2011级 计算机 专业班级: * 学号: * 姓名: * -实验二 栈和队列及其应用一、 实验目的:1掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。2掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵活运用。二、 实验内容:1链栈的建立、入栈、出栈操作。2环形队列的建立、入队、出队操作。3停车场管理。设停车场内只有一个可停放n辆汽车的狭长通道,

2、且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。实现提示:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“

3、到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表(带头结点)实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。设n=2,输入数据为:(A,1,5),(A,2,10),(D,1,15),(A,3, 20), (A,4,25),(A,5,

4、30),(D,2,35),(D,4,40),(E,0,0)。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,A表示到达;D表示离去,E表示输入结束。三、 实验要求:1 C/ C+完成算法设计和程序设计并上机调试通过。2 撰写实验报告,提供实验结果和数据。3 写出算法设计小结和心得。四、 程序源代码:1.#include#includetypedef struct stnode int data; stnode *next;LinkStack;/创建一个栈头结点,无头结void InitStack(LinkStack *&ls) ls=NULL;/

5、进栈,相当于头插法void Push(LinkStack *&ls,int x) LinkStack *p; p=(LinkStack *)malloc(sizeof(LinkStack); p-data=x; p-next=NULL; p-next=ls; ls=p;/出栈void Pop(LinkStack *&ls) if(ls=NULL) return; LinkStack *p; int x; p=ls; while(p) x=p-data; ls=p-next; coutx ; free(p); p=ls; cout出栈成功!endl;/创建栈void CreatStack(Lin

6、kStack *&ls) InitStack(ls); int i=1,num; cout以000表示输入结束!endl; while(1) cout请输入第inum; if(num=000) break; Push(ls,num); i+; cout进栈成功!endl;void main() LinkStack *ls,*p; CreatStack(ls); Pop(ls);2.#include#define QueueSize 100typedef struct sqqueue int dataQueueSize; int front,rear;SqQueue;/初始化队列void Ini

7、tQueue(SqQueue &qu) qu.rear=qu.front=0;/进队int EnQueue(SqQueue &sq,int x) if(sq.rear+1)%QueueSize=sq.front) return 0; sq.rear=(sq.rear+1)%QueueSize; sq.datasq.rear=x; return 1;/出队void DeQueue(SqQueue &sq) int x; if(sq.front=sq.rear) return; while(sq.front!=sq.rear) sq.front=(sq.front+1)%QueueSize; x=

8、sq.datasq.front; coutx ; cout出队成功!endl;/创建队void CreatQueue(SqQueue &sq) InitQueue(sq); int num,i=1; cout以000表示输入结束!endl; while(1) cout请输入第inum; if(num=000) break; EnQueue(sq,num); i+; cout进队成功!endl;void main() SqQueue sq; CreatQueue(sq); DeQueue(sq);3.#include#include#include#define MAX 2#define pri

9、ce 0.05typedef struct node int hour; int min;Time;/时间结点typedef struct Node char num10;/车牌号 Time reach;/时间 Time leave;CarNode;/车辆信息结点typedef struct NODE CarNode *stackMAX; int top;CarStack;/顺序栈模拟车站typedef struct QNode/队列 CarNode *data; QNode *next;QueueNode;/链队结点类型typedef struct pqrt QueueNode *front

10、,*rear;/设置头指针尾指针LinkQueueCar;/模拟通道/初始化栈void InitStack(CarStack *cs);/初始化队列(便道)int InitQueue(LinkQueueCar *qc);/车辆到达int Arrival(CarStack *Enter,LinkQueueCar *qc);/车辆离开void Leave(CarStack *Enter,CarStack *Temp,LinkQueueCar *qc);/显示车库信息void List(CarStack s,LinkQueueCar w);void main() CarStack Enter,Tem

11、p; LinkQueueCar Wait; int ch; InitStack(&Enter); InitStack(&Temp); InitQueue(&Wait); while(1) cout欢迎光临endl; cout-endl; cout1.车辆到达endl; cout2.车辆离开endl; cout3.车场显示endl; cout4.退出程序endl; cout-endl; cout请选择所需的服务!ch; if(ch=1&chtop=-1;/初始化栈 for(int i=0;istackcs-top=NULL;int InitQueue(LinkQueueCar *qc)/初始化队

12、列 /qc=(LinkQueueCar *)malloc(sizeof(LinkQueueCar);这句话不能要? qc-front=(QueueNode *)malloc(sizeof(QueueNode); if(qc-front!=NULL) qc-front-next=NULL;/带头结点的 qc-rear=qc-front;/一定要注意赋值顺序不能反了! return 1; else return -1;/打印车站车离开的信息void Print(CarNode *p,int room) int A1,A2,B1,B2;/车辆收费 cout请输入离开时间:/*:*/endl; cou

13、tp-leave.hour; while(p-leave.hourreach.hour|p-leave.hour23) couterror!p-leave.hour; B1=p-leave.hour; coutp-leave.min; while(p-leave.minleave.min59) couterror!p-leave.min; B2=p-leave.min; coutendl离开汽车的车牌号为:num); cout其到达时间为:reach.hour:reach.minendl; cout其离开时间为:leave.hour:leave.minreach.hour; A2=p-reac

14、h.min; cout应交费用为:(B1-A1)*60+(B2-A2)*price元endl; free(p);int Arrival(CarStack *Enter,LinkQueueCar *qc) CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); cout请输入车牌号(例A8888):num); if(Enter-top+1)top+; cout车辆在车场第top位置endl; cout请输入到达时间:/*:*/endl; coutp-reach.hour; while(p-reach.hourreach.hou

15、r23) couterror!p-reach.hour; coutp-reach.min; Enter-stackEnter-top=p;/注意数组下标是从0开始,在显示时下标也要与之对应 cout车近停车场成功!endl; return 1; else cout该车需在便道上等待!data=p; t-next=NULL; qc-rear-next=t; qc-rear=t; cout车进便道成功!top-1)/判断车场是否为空 while(1) coutroom; if(room=0&roomtop) break; /要离开的车后面还有车,则后面的车需进入临时栈给前面的车让路 while(E

16、nter-toproom)/用Enter-top和room相比看你的车在第几个位置,前面的几辆车需全部让路 Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; /让路完以后车再离开 p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; /车离开后,如果临时栈里有车,重新进车站 while(Temp-top=0) Enter-top+; Enter-stackEnter-top=Temp-stac

17、kTemp-top; Temp-stackTemp-top=NULL; Temp-top-; cout临时车场里的车重新进站成功!front!=qc-rear&Enter-topfront-next; t=q-data; Enter-top+; cout便道上的num号车进入车场第top位置endl; cout请输入现在的时间:/*:*/endl; coutt-reach.hour; while(t-reach.hourreach.hour23) couterror!t-reach.hour; coutt-reach.min; qc-front-next=q-next;/出便道 if(q=qc

18、-rear) qc-front=qc-rear; Enter-stackEnter-top=t;/进车站 free(q); cout便道的车进入停车场成功!endl; else cout便道里没有车!endl; else cout车场里没有车!top-1) cout车场endl; cout位置 时间 车牌号endl; for(i=0;itop+1);i+) cout i stacki-reach.hour:stacki-reach.min stacki-numendl; else cout车场里没有车!front-next;/p先指向第一辆车, if(w-front!=w-rear)/判断便道

19、是否为空 cout等待车辆的号码为:data-num); p=p-next; else cout便道里没有车!endl;void List(CarStack s,LinkQueueCar w)/显示整个停车场的信息 int flag,tag; flag=1; while(flag) cout请选择1|2|3:endl; cout1.车场 2.便道 3.返回tag; if(tag=1|tag=3) break; else cout请选择1|2|3:endl; switch(tag) case 1:List1(&s); break; case 2:List2(&w); break; case 3:

20、flag=0; break; default:break; 五、 程序运行情况(写出输入数据及运行结果)六、 小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)本次实验前两题是栈和队列的基本算法,是基础练习,关键是第三题,具体谈谈我理解的停车场。 停车场系统总的来说分为五大块,第一块和第二块属于基本操作,包括初始化栈和队列;第三块是车到达,分为两个层次:1.车到达了进栈2.栈满,进队列。第四块是车离开,分为五个层次:1.车离开,判断该车后面是否还有车2.有车的话,后面的车让路,进临时栈3.然后该车离开,打印出离开信息4.离开后,判断临时栈上是否有车,有车重新进车站5.再判断便道上是

21、否有车,有车也进车站。第五块是显示车站信息,分为三个层次:1.显示车站信息2.显示便道信息3.返回。整个停车场系统涉及的结构体有: 1.描述时间Time 2.描述一辆车CarNode 3.模拟车站CarStack 4.模拟便道QueueNode,LinkQueueCar整个停车场系统涉及的函数有; 1.栈和队列的初始化2.车进站3.车出战4.计费函数5.显示车站信息6.显示便道信息7.显示整个停车场的信息 需要注意的问题:1. 在初始化栈是top=-1或0是不一样的,涉及到后面显示时数组下标的问题。另外因为栈中包含指针数组所以必须给指针初始化2. 车出站时分的几个层次都要考虑到,注意函数的参数

22、包括三部分(车站,临时车站,队列),注意各个环节的连接,临时栈的应用。在判断车在第几个位置时需要根据自己输入车在车场的位置,然后与top比较,看车是否在栈尾,是直接出栈还是需要让路后在出栈?判断便道上的车是否能进车站时要根据两个条件,一是便道上有车,二是车站没满。3. 显示时要注意数组的下标,初始化时top=-1,所以在用for循环遍历所有的结点时要用for(i=0;itop+1);i+)才能正确输出。4. 在写计费函数时,分别用几个变量存放到达和离开的时间,做减法后乘以价格输出就行了,容易实现关键是要理解。5. 主函数和显示函数中都用的是switch语句,很好用。同时我觉得while(1)死循环也很好用,以后要试着多用。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1