




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、浙江大学城市学院实验报告课程名称 数据结构 实验项目名称 实验五 栈与队列的应用-停车场管理 学生姓名 王逸翀 专业班级 统计1501 学号 31501033 学生姓名 陈特 专业班级 统计1501 学号 31501021 学生姓名 洪宇豪 专业班级 统计1501 学号 31501024 实验成绩 指导老师(签名 ) 日期 一. 实验目的和要求1、掌握栈的后进先出原则,以及栈的存储结构和基本操作。2、掌握队列的存储结构及基本操作。3、通过具体的应用实例,掌握栈和队列在实际问题中的运用。4、加强综合程序的分析、设计能力。二. 实验内容1、请编制程序模拟停车场管理,该程序系统需3位同学一组,协作完
2、成。停车场管理问题描述如下:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放(即最先到达的第一辆车停放在停车场的最里面)。如果停车场已放满n辆车,则以后到达的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车可以进入停车场。停车场内如有某辆车要开走,则在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费,停留在便道上的车不收停车费。要求: 以顺序栈模拟停车场,以链队列模拟停车场外的
3、便道,另设一个顺序栈,临时停放为给要离开的汽车让路而从停车场退出来的汽车。 程序采用菜单方式,其选项及功能说明如下: (1)汽车到达输入车牌号、汽车到达时间,输出该车的停车位置;(2)汽车离开输入车牌号、汽车离开时间,输出该车在停车场内停留的时间和应交纳的费用(为简化问题,可假设汽车不能过夜,即时间从0点到24点); (3)查看停车场内的汽车从栈顶到栈底列出所有车的车牌号;(4)查看便道上的汽车从队首到队尾列出所有车的车牌号;(5)停车场关闭释放数据空间,结束程序运行。 建立头文件SeqStack.h和LinkQueue.h,分别包含顺序栈和链队列的基本操作实现函数,建立主程序文件test5.
4、cpp,在主函数中通过调用栈和队列的基本操作函数来实现上述功能。 自行增加合适的功能,可作为额外的实验成绩进行加分(例如考虑汽车可以过夜,晚上的收费标准与白天不一样;又比如排在便道上等候的汽车可以考虑有优先级,优先级高的排在前面,即用优先级队列来实现等等)。2、以小组为单位认真填写实验报告,在实验报告中需写明每位同学的分工,实验报告文件取名为report5.doc。每组还必须制作一个答辩PPT,该PPT的命名为停车场管理系统_(各小组成员名字).PPT。3、每位同学上传实验报告文件report5.doc 、源程序文件test5.cpp及SeqStack.h、LinkQueue.h,以及答辩PP
5、T到BB平台上。三. 存储结构定义、函数的功能说明及算法思路 (包括存储结构的定义、每个函数的功能说明,以及重要函数的算法实现思路)四. 实验结果与分析(包括运行结果截图、结果分析等)五. 小组成员任务分工、得分及实验总结(详细说明小组每位成员完成的任务以及总分不超过12分的分数分配;总结实验过程中遇到的问题及解决办法、遗留的问题、可以进一步改进的地方等。)陈特:主函数,函数整合调试,PPT,查看停车场,便道车辆。洪宇豪:入栈出栈,栈空栈满函数,费用函数,汽车进停车场函数。王逸翀:入队出队函数,汽车进便道函数。【附录-源程序】Cpp#include<stdio.h>#include
6、<iostream>#include<string.h>#include<string>#include<stdlib.h>#include<iomanip>#define TRUE 1#define FALSE 0#define maxsize 3using namespace std; typedef struct parkingchar plate_number50;int in_hour;int in_minute;int out_hour;int out_minute;int num;sp;/停车场顺序栈 /*typedef
7、 struct temp_parkingstring plate number;int in_hour;int in_minute;int out_hour;int out_minute;tp;/临时栈*/ typedef struct wait_loadchar plate_number50;int in_hour;int in_minute;struct wait_load* next;int num;wl;/便道队列 typedef struct linkwl* front;wl* rear;hlink;/便道头尾 #include"SeqStack.h"#inclu
8、de"LinkQueue.h" int main(void)sp parkingmaxsize+1, tparking50, *base,*top,*tbase, *ttop ;int command, pnum, wnum, tnum, t1,t2;hlink Q;/wl headQ;/top=new sp;/base=new sp;/tbase=new sp;/ttop=new sp;Q.front=Q.rear=new wl;Q.front->next=NULL;/Q.front->next=NULL;top=parking;base=parking;tt
9、op=tbase=tparking;/command=2333;pnum=wnum=tnum=1;while(1)system("cls");cout<<"-n" cout<<"* 1.汽车到达 *n"cout<<"* 2.汽车离开 *n"cout<<"* 3.查看停车场内停放情况 *n"cout<<"* 4.查看便道停放情况 *n"cout<<"* 5.停车场关闭 *n"/cout&
10、lt;<"* 6.退出¥ *n"cout<<"-n"cout<<"-n"cout<<" 0-15分钟不收费,不足一小时按一小时计n"cout<<" 每小时5元 n"cout<<"-n" cout<<"n" cin>>command;while(cin.fail()|command<1|command>6)cin.clear();cout<<&q
11、uot;请输入一个合法的指令n"cin.ignore(1024,'n');cin>>command; switch (command)case 1:if(full_parking(top,base)EnQueue(Q, wnum); else in_parking(top,base,pnum); /in_parking(top,base,pnum,wnum,Q);break;case 2:if(empty_parking(top,base)cout<<"当前停车场内没有车"<<endl;elseout_parki
12、ng(tbase,ttop,top,base,pnum,t1,t2);inparking(Q, top, wnum,t1,t2);system("pause");break;case 3:traversepark( top, base);system("pause");break;case 4:traverseQ(Q);system("pause");break;case 5:closepark(top,base,ttop,tbase);closewl(Q);cout<<"停车场以关闭"<<
13、endl;system("pause");return 0; SeqStack.hvoid in_parking(sp *&top,sp *&base,int &pnum ) int in_hour, in_minute; char hour50; char plate_number50; cout<<"*"<<endl; cout<<"您当前进行的操作是汽车到达n" cout<<"请输入您的车牌号n"/getline(cin,plate_nu
14、mber,'#');cin>>plate_number;cout<<"请输入到达时间n"cin>>hour;sscanf(hour,"%d:%d",&in_hour,&in_minute); /cin>>in_hour>>in_minute>>pnum; /getline(cin,plate_number,'#'); /*if(full_parking(top,base) /cout<<"停车场已满"&l
15、t;<endl; EnQueue(Q, plate_number, in_hour, in_minute, wnum); */ /top->plate_number=plate_number; strcpy(top->plate_number,plate_number);top->in_hour=in_hour;top->in_minute=in_minute;top->num=pnum;top+;pnum+;cout<<"您当前停车位子为"<<" "<<pnum-1<<
16、" "<<endl;system("pause"); int full_parking(sp *top,sp *base)if(top-base=maxsize)return TRUE;elsereturn FALSE; int empty_parking(sp *top,sp *base)if(top=base) return TRUE; else return FALSE; double fee(int in_hour,int in_minute,int out_hour,int out_minute) double fee,reduce
17、_minute; int n=0; /cout<<in_hour<<" "<<in_minute<<" "<<out_hour<<" "<<out_minute<<" "<<endl; reduce_minute=1.00*(out_hour*60+out_minute-(in_hour*60+in_minute); /cout<<reduce_minute<<endl; if(red
18、uce_minute>=0&&reduce_minute<=15) fee=0; else if(reduce_minute>15&&reduce_minute<60) fee=5; /cout<<fee<<endl; else while(reduce_minute>=0) n+; reduce_minute=reduce_minute-60; fee=n*5; /if(isinteger(reduce_minute/60) /fee=5*reduce_minute/60; /else / fee=5*(i
19、nt)reduce_minute/60); return fee; void pop(sp *&top,sp *&base,sp &e)/if(top=base) /cout<<"停车场已空"<<endl; /else /top-;e.in_hour=top->in_hour;e.in_minute=top->in_minute;e.out_minute=top->out_minute;e.out_hour=top->out_hour;/e.plate_number=top->plate_numb
20、er;strcpy(e.plate_number,top->plate_number);e.num=top->num;/top-; / void push(/*sp*top,sp*base,*/sp* &ttop,sp e) /if(top-base=Maxsize) /cout<<"停车场已满"<<endl;/else /ttop-;/cout<<ttop<<endl;/cout<<"inpush"<<endl;ttop->in_hour=e.in_hou
21、r;ttop->in_minute=e.in_minute; ttop->out_minute=e.out_minute; ttop->out_hour=e.out_hour; /ttop->plate_number=e.plate_number; strcpy(ttop->plate_number,e.plate_number); ttop->num=e.num; ttop+; /cout<<ttop<<endl;/ void out_parking(sp*tbase,sp*ttop,sp* &top,sp* &ba
22、se,int &pnum,int &t1, int &t2)int out_hour,out_minute;double money; char plate_number50; char hour50; int count; count=0; sp *p, *q, *r; sp e; /p=new sp;/q=new sp;/r=new sp;/if(empty_parking(top,base) /cout<<"停车场为空"<<endl; /else/cout<<"*"<<endl
23、; cout<<"您当前进行的操作是汽车离开n" cout<<"请输入您的车牌号n"/getline(cin,plate_number,'#');cin>>plate_number;/cout<<"请输入离开时间n"/cin>>hour;/sscanf(hour,"%d:%d",&out_hour,&out_minute); q=top;/cout<<"here1"<<endl;
24、q-;/cout<<q<<endl;/cout<<"here2"<<endl; for(p=q;p>=base;p-) /cout<<p<<endl; if(strcmp(p->plate_number,plate_number)=0) /cout<<"find"<<endl; count=1; break;if(!count)cout<<"当前停车场内没有此车"<<endl;return; /r=p;
25、/cin>>p->out_hour>>p->out_minute; pnum-; cout<<"请输入离开时间n"cin>>hour;sscanf(hour,"%d:%d",&out_hour,&out_minute);p->out_hour=out_hour;p->out_minute=out_minute;t1=out_hour;t2= out_minute; if(p->out_minute-p->in_minute<0) p->out_
26、minute=p->out_minute+60; p->out_hour-; out_hour=p->out_hour-p->in_hour;out_minute=p->out_minute-p->in_minute;money=fee(p->in_hour,p->in_minute,p->out_hour,p->out_minute);cout<<"停车开始时间"<<p->in_hour<<":"<<setfill('0')
27、<<setw(2)<<p->in_minute<<"n"<<"离开时间为"<<t1<<":"<<setfill('0')<<setw(2)<<t2<<"n" <<"您本次停车时间为"<<out_hour<<"小时"<<out_minute<<"分" <
28、<"费用为"<<money<<"元"<<endl; /cout<<leave_hour<<":"<<leave_minute<<''<<fee<<endl; /top-;/ cout<<"地址"<<top<<' '<<top-1<<' '<<top-2<<endl;/调试
29、while(top!=base&&(strcmp(top-1)->plate_number,plate_number)!=0)/cout<<"便道"<<endl; pop(top,base,e); /cout<<"弹出的是"<<e.plate_number<<endl; push(/*top,base,*/ttop,e); /cout<<"压入的是"<<e.plate_number<<endl; /top-; pop(
30、top,base,e);/cout<<"here9"<<endl; /delete r; /cout<<"t"<<ttop<<' '<<tbase<<endl; while(ttop!=tbase)/cout<<"开始压出"<<endl; /ttop-; pop(ttop,tbase,e); cout<<"弹出"<<e.plate_number<<endl;
31、 e.num-; push(/*ttop,tbase,*/top,e); /cout<<"here10"<<endl;return;void traversepark(sp* top,sp* base)sp* p;if(top=base)cout<<"当前停车场没有车"<<endl;return; cout<<"序列号"<<"t"<<"车牌号"<<"t"<<"
32、停车时间"<<endl;for(p=base;p!=top;p+)/cout<<"序列号"<<"t"<<"车牌号"<<"t"<<"停车时间"<<endl;cout<<p->num<<"t"<<p->plate_number<<"t"<<p->in_hour<<":&
33、quot;<<p->in_minute<<endl;void closepark(sp* &top,sp* &base,sp* &ttop,sp* &tbase)top=base;ttop=tbase;LinkQueue.hvoid EnQueue(hlink &Q, int &wnum) wl *p;int in_hour, in_minute; char hour50; char plate_number50; cout<<"*"<<endl; cout<<
34、"您当前进行的操作是汽车到达n" cout<<"请输入您的车牌号n"/getline(cin,plate_number,'#');cin>>plate_number;cout<<"请输入到达时间n"cin>>hour;sscanf(hour,"%d:%d",&in_hour,&in_minute);p=new wl;/p->plate_number=plate_number;strcpy(p->plate_number,pl
35、ate_number);p->in_hour=in_hour;p->in_minute=in_minute;p->num=wnum;p->next=NULL;if(Q.front=Q.rear)Q.front->next=p;Q.rear->next=p;Q.rear=p;cout<<"当前停车场已满,请您在便道等候,您的序号为 "<<wnum<<endl;wnum+;system("pause"); void inparking(hlink&Q,sp * &top,int &wnum,int &t1, int &t2)int i;wl *p;if(Q.front=Q.rear)return;i=wnum;/cout<<top<<' '<<top-1<<endl; /top+;/top->in_hour=Q.front->next->in_hour;/top->in_minute=Q.front->next->in_minute;top->in_hour=t1;top->i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024安全监察人员题库检测试题打印含答案详解(A卷)
- 金融销售培训方案
- 吉林省白山长白县联考2026届英语九上期末教学质量检测模拟试题含解析
- 旅游协会工作总结
- 2026届江西省吉安市第四中学九上化学期中考试模拟试题含解析
- 高热惊厥急救知识培训
- 2026届黑龙江省大庆市三十二中学化学九年级第一学期期中教学质量检测模拟试题含解析
- 2026届辽宁省盘锦地区九年级化学第一学期期中监测试题含解析
- 2026届安徽省庐阳区五校联考化学九上期中达标检测试题含解析
- 2026届吉林省吉林市第12中学化学九年级第一学期期末质量检测试题含解析
- 人工智能技术在网络安全威胁检测中的应用
- 电焊机安全知识培训课件
- 2025内蒙古民族大学招聘管理助理、教学助理50人笔试模拟试题及答案解析
- 2025年麻醉、第一类精神药品管理培训考核试题及答案(护士卷)
- 反恐重点单位授课课件
- 2025年事业单位笔试-贵州-贵州药事管理(医疗招聘)历年参考题库含答案解析
- 战术基础动作低姿匍匐
- Unit2课时1ListeningSpeaking(课件)英语仁爱科普版2024八年级上册
- 14.2 三角形全等的判定(第2课时)
- 机房维护保密协议合同模板
- 2025医师处方权试题及答案(全文)
评论
0/150
提交评论