实验5report5.doc_第1页
实验5report5.doc_第2页
实验5report5.doc_第3页
实验5report5.doc_第4页
实验5report5.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档浙江大学城市学院实验报告课程名称 数据结构 实验项目名称 实验五 栈与队列的应用-停车场管理 学生姓名 王逸翀 专业班级 统计1501 学号 31501033 学生姓名 陈特 专业班级 统计1501 学号 31501021 学生姓名 洪宇豪 专业班级 统计1501 学号 31501024 实验成绩 指导老师(签名 ) 日期 一. 实验目的和要求1、掌握栈的后进先出原则,以及栈的存储结构和基本操作。2、掌握队列的存储结构及基本操作。3、通过具体的应用实例,掌握栈和队列在实际问题中的运用。4、加强综合程序的分析、设计能力。二. 实验内容1、请编制程序模拟停车场管理,该程序系统需3位同学一组,协作完成。停车场管理问题描述如下:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放(即最先到达的第一辆车停放在停车场的最里面)。如果停车场已放满n辆车,则以后到达的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车可以进入停车场。停车场内如有某辆车要开走,则在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费,停留在便道上的车不收停车费。要求: 以顺序栈模拟停车场,以链队列模拟停车场外的便道,另设一个顺序栈,临时停放为给要离开的汽车让路而从停车场退出来的汽车。 程序采用菜单方式,其选项及功能说明如下: (1)汽车到达输入车牌号、汽车到达时间,输出该车的停车位置;(2)汽车离开输入车牌号、汽车离开时间,输出该车在停车场内停留的时间和应交纳的费用(为简化问题,可假设汽车不能过夜,即时间从0点到24点); (3)查看停车场内的汽车从栈顶到栈底列出所有车的车牌号;(4)查看便道上的汽车从队首到队尾列出所有车的车牌号;(5)停车场关闭释放数据空间,结束程序运行。 建立头文件SeqStack.h和LinkQueue.h,分别包含顺序栈和链队列的基本操作实现函数,建立主程序文件test5.cpp,在主函数中通过调用栈和队列的基本操作函数来实现上述功能。 自行增加合适的功能,可作为额外的实验成绩进行加分(例如考虑汽车可以过夜,晚上的收费标准与白天不一样;又比如排在便道上等候的汽车可以考虑有优先级,优先级高的排在前面,即用优先级队列来实现等等)。2、以小组为单位认真填写实验报告,在实验报告中需写明每位同学的分工,实验报告文件取名为report5.doc。每组还必须制作一个答辩PPT,该PPT的命名为停车场管理系统_(各小组成员名字).PPT。3、每位同学上传实验报告文件report5.doc 、源程序文件test5.cpp及SeqStack.h、LinkQueue.h,以及答辩PPT到BB平台上。三. 存储结构定义、函数的功能说明及算法思路 (包括存储结构的定义、每个函数的功能说明,以及重要函数的算法实现思路)四. 实验结果与分析(包括运行结果截图、结果分析等)五. 小组成员任务分工、得分及实验总结(详细说明小组每位成员完成的任务以及总分不超过12分的分数分配;总结实验过程中遇到的问题及解决办法、遗留的问题、可以进一步改进的地方等。)陈特:主函数,函数整合调试,PPT,查看停车场,便道车辆。洪宇豪:入栈出栈,栈空栈满函数,费用函数,汽车进停车场函数。王逸翀:入队出队函数,汽车进便道函数。【附录-源程序】Cpp#include#include#include#include#include#include#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 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;/便道头尾 #includeSeqStack.h#includeLinkQueue.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;ttop=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* 6.退出¥ *n;cout-n;cout-n;cout 0-15分钟不收费,不足一小时按一小时计n;cout 每小时5元 n;cout-n; coutcommand;while(cin.fail()|command6)cin.clear();coutcommand; 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_parking(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停车场以关闭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; coutplate_number;couthour;sscanf(hour,%d:%d,&in_hour,&in_minute); /cinin_hourin_minutepnum; /getline(cin,plate_number,#); /*if(full_parking(top,base) /cout停车场已满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 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_minute; int n=0; /coutin_hour in_minute out_hour out_minute endl; reduce_minute=1.00*(out_hour*60+out_minute-(in_hour*60+in_minute); /coutreduce_minute=0&reduce_minute15&reduce_minute60) fee=5; /coutfee=0) n+; reduce_minute=reduce_minute-60; fee=n*5; /if(isinteger(reduce_minute/60) /fee=5*reduce_minute/60; /else / fee=5*(int)reduce_minute/60); return fee; void pop(sp *&top,sp *&base,sp &e)/if(top=base) /cout停车场已空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_number;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-;/coutttopendl;/coutinpushin_hour=e.in_hour;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+; /coutttopendl;/ void out_parking(sp*tbase,sp*ttop,sp* &top,sp* &base,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; cout您当前进行的操作是汽车离开n; coutplate_number;/couthour;/sscanf(hour,%d:%d,&out_hour,&out_minute); q=top;/couthere1endl; q-;/coutqendl;/couthere2=base;p-) /coutpplate_number,plate_number)=0) /coutfindendl; count=1; break;if(!count)cout当前停车场内没有此车p-out_hourp-out_minute; pnum-; couthour;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_minuteout_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停车开始时间in_hour:setfill(0)setw(2)in_minuten离开时间为t1:setfill(0)setw(2)t2n 您本次停车时间为out_hour小时out_minute分 费用为money元endl; /coutleave_hour:leave_minutefeeendl; /top-;/ cout地址top top-1 top-2plate_number,plate_number)!=0)/cout便道endl; pop(top,base,e); /cout弹出的是e.plate_numberendl; push(/*top,base,*/ttop,e); /cout压入的是e.plate_numberendl; /top-; pop(top,base,e);/couthere9endl; /delete r; /couttttop tbaseendl; while(ttop!=tbase)/cout开始压出endl; /ttop-; pop(ttop,tbase,e); cout弹出e.plate_numberendl; e.num-; push(/*ttop,tbase,*/top,e); /couthere10endl;return;void traversepark(sp* top,sp* base)sp* p;if(top=base)cout当前停车场没有车endl;return; cout序列号t车牌号t停车时间endl;for(p=base;p!=top;p+)/cout序列号t车牌号t停车时间endl;coutnumtplate_numbertin_hour:in_minuteendl;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您当前进行的操作是汽车到达n; coutplate_number;couthour;sscanf(hour,%d:%d,&in_hour,&in_minute);p=new wl;/p-plate_number=plate_number;strcpy(p-plate_number,plate_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当前停车场已满,请您在便道等候,您的序号为 wnumendl;wnum+;system(pause); void inparking(hlink&Q,sp * &top,int &wnum,int &t1, int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论