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

上传人:小飞机 文档编号:5034419 上传时间:2023-05-30 格式:DOCX 页数:20 大小:184.45KB
返回 下载 相关 举报
停车场管理系统实验报告.docx_第1页
第1页 / 共20页
停车场管理系统实验报告.docx_第2页
第2页 / 共20页
停车场管理系统实验报告.docx_第3页
第3页 / 共20页
停车场管理系统实验报告.docx_第4页
第4页 / 共20页
停车场管理系统实验报告.docx_第5页
第5页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《停车场管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《停车场管理系统实验报告.docx(20页珍藏版)》请在三一办公上搜索。

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,30),(D

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

6、以000表示输入结束!endl;while(1)cout请输入第inum;if(num=000)break;Push(ls,num);i+;cout进栈成功! ! endl;void main()CreatStack(ls);Pop(ls);2. #include#define QueueSize 100typedef struct sqqueueint dataQueueSize;int front,rear;SqQueue;初始化队列void InitQueue(SqQueue &qu)qu.rear=qu.front=0;进队int EnQueue(SqQueue &sq,int x)i

7、f(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=sq.datasq.front;coutx;cout出队成功!endl;/创建队void CreatQueue(SqQueue &sq)InitQueue(sq);int

8、 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 price 0.05typedef struct nodeint hour;int min;Time;/时间结点typedef struct Nodechar num10;/车牌号Time re

9、ach;/ 时间Time leave;CarNode;/车辆信息结点typedef struct NODECarNode *stackMAX;int top;CarStack;/顺序栈模拟车站typedef struct QNode/ 队列CarNode *data;QNode *next;QueueNode;/链队结点类型typedef struct pqrtQueueNode *front,*rear;/设置头指针尾指针LinkQueueCar;/模 拟通道初始化栈void InitStack(CarStack *cs);初始化队列(便道)int InitQueue(LinkQueueCa

10、r *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,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter);InitStack(&Temp);InitQueue(&Wait);while(1)cout欢迎光临endl;coutend

11、l;cout1,车辆到达endl;cout2 .车辆离开endl;cout3.车场显示endl;cout4 .退出程序endl;coutendl;cout请选择所需的服务!ch;if(ch=1&chtop=-1;/初 始化栈for(int i=0;istackcs-top=NULL;int InitQueue(LinkQueueCar *qc)/初始化队列/qc=(LinkQueueCar *)malloc(sizeof(LinkQueueCar)这句话不能要?qc-front=(QueueNode *)malloc(sizeof(QueueNode);if(qc-front!=NULL)qc

12、-front-next=NULL;/滞 头结点的qc-rear=qc-front;/定要注意赋值顺序不能反了!return 1;elsereturn -1;打印车站车离开的信息void Print(CarNode *p,int room)int A1,A2,B1,B2;/车辆收费cout请输入离开时间:/*:*/endl;coutp-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

13、.min59)couterror!p-leave.min;B2=p-leave.min;coutendl离开汽车的车牌号为:num);cout其到达时间 为:reach.hour:reach.minendl;cout其离开时间 为:leave.hour:leave.minreach.hour;A2=p-reach.min;cout应交费用为:(B1-A1)*60+(B2-A2)*price元endl;free(p);int Arrival(CarStack *Enter,LinkQueueCar *qc)CarNode *p;QueueNode *t;p=(CarNode *)malloc(s

14、izeof(CarNode);cout请输入车牌号(例 A8888):num);if(Enter-top+1)top+;cout车辆在车场第top位置endl;cout请输入到达时间:/*:*/endl;coutp-reach.hour;while(p-reach.hourreach.hour23)couterror!p-reach.hour;coutp-reach.min;Enter-stackEnter-top=p;/主意数组下标是从0开始,在显示时下标也要与之对应 cout车近停车场成功!endl;return 1;elsecout该车需在便道上等待!data=p;t-next=NULL

15、;qc-rear-next=t;qc-rear=t;cout车进便道成功!top-1)/判断车场是否为空while(1)coutroom;if(room=0&roomtop)break;要离开的车后面还有车,则后面的车需进入临时栈给前面的车让路while(Enter-toproom)/用 Enter-top和room相比看你的车在第几个位置,前面的几辆车需全部 让路Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-;让路完以后车再离开p=Enter-stackEnter-t

16、op;Enter-stackEnter-top=NULL;Enter-top-;车离开后,如果临时栈里有车,重新进车站while(Temp-top=0)Enter-top+;Enter-stackEnter-top=Temp-stackTemp-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.hou

17、r;while(t-reach.hourreach.hour23)couterror!t-reach.hour;coutt-reach.min;qc-front-next=q-next;/出 便道if(q=qc-rear) qc-front=qc-rear;Enter-stackEnter-top=t;/进 车站free(q);cout便道的车进入停车场成功!endl;elsecout便道里没有车!endl;cout车场里没有车!top-1)cout车场endl;cout位置时间车牌号endl;for(i=0;itop+1);i+)coutistacki-reach.hour:stacki-r

18、each.minstacki-numendl;elsecout车场里没有车!front-next;/p 先指向第一辆车,if(w-front!=w-rear)/判断便道是否为空cout等待车辆的号码为:data-num);p=p-next;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;elsecout请选择 1|2|3: 1车驾-5

19、9珈0 0 为 0以:/时八 号:0:3元膏的的车 牌:E:6.5T&停 车为为266SSS入 的鼎为S5在达诂进 车0T用的现我 汽 8 达上A-AAw-光 开88到禺交道道迎 达开一律半 到离显程 is 土 34.六、 小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)本次实验前两题是栈和队列的基本算法,是基础练习,关键是第三题,具体谈谈我 理解的停车场。停车场系统总的来说分为五大块,第一块和第二块属于基本操作,包括初始化 栈和队列;第三块是车到达,分为两个层次:1.车到达了进栈2.栈满,进队列。第四块是 车离开,分为五个层次:1.车离开,判断该车后面是否还有车2.有车的话,后

20、面的车让路, 进临时栈3.然后该车离开,打印出离开信息4.离开后,判断临时栈上是否有车,有车重 新进车站5.再判断便道上是否有车,有车也进车站。第五块是显示车站信息,分为三个 层次:1.显示车站信息2.显示便道信息3.返回。整个停车场系统涉及的结构体有:1.描述时间Time 2.描述一辆车CarNode3.模拟车站 CarStack 4.模拟便道 QueueNode,LinkQueueCar整个停车场系统涉及的函数有;1. 栈和队列的初始化2.车进站3.车出战4.计费函数5.显示车站信息6.显示便道信息7.显示整个停车场的信息需要注意的问题:1. 在初始化栈是top=-1或0是不一样的,涉及到

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号