版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
暨南大学数据结构实习报告题目:停车场模拟程序专业:03计机姓名:黄泳晞学号:2003402054529问题描述:设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆达到时间的先后顺序,依次由北向南排列(大门在最南端,最先达到的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退车车场为它让路,待赶辆车开出大门外,其它车辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短叫纳费用。试为停车场编制按上述要求进行管理的模拟程序二.算法思路(1)两个栈和一个队列。根据题目要求,停车场只有一个大门,因此可用一个栈来模拟:当栈满后,继续来到的车辆只能停在便道上,根据便道停车的特点,可知这可以用一个队列来模拟,先排队的车辆先离开便道,进入停车场。由于排在停车场中间的车辆可以提出离开停车场,并且要求在离开车辆到停车场大门之间的车辆都必须先离开停车场,让此车离开,然后让这些车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上,还需要用一个栈来保存为了让路离开停车场的车辆。所以本题要用两个栈和一个队列。(2)操作:栈:进栈:车辆进入出栈:车辆离开查找:允许排中间的车辆先离开停车场,因此需要在栈中进行查找。(3)队列:进队:车辆进入出队:车辆离开查找:允许排中间的车辆先离开停车场,因此需要在队中进行查找。三.概要设计:1.函数:voidIncar()车辆x进入停车场voidOutcar()车辆x离开停车场voidDisplay()显示停车场的状况2.一系列算法:intDelQueue_L(LQueue*q)voidEnQueue_L(LQueue*q,intnum1)voidInitQueue_L(LQueue*q)ELEMTPPop_Sq(SqStack*s)intPush_Sq(SqStack*s,ELEMTPx)voidInitStack_Sq(SqStack*s)3.主程序:main(){ 初始化; do{ 选择工作项目; switch(字符) { case'1': 内容; case'2': 内容;while(条件) { 判断输入时间合法性 };调用车辆进入的函数; case'3': 内容;while(条件) { 判断输入时间合法性 };调用车辆离开的函数; case'4': 程序结束 default: 输入数据错误 } } while(条件);三.程序源代码:#include<stdio.h>#include<stdlib.h>#include<iostream.h>#defineN2//--------停车场容量----------------#defineM0.05//--------停车场内每分钟单价--------#defineO0.02//--------便道每分钟停车单价--------#defineTrue1#defineFalse0;typedefstructtime{ inthour; intmin;}Time;/*时间结点*/typedefstruct{ timehh,mm; intnum;//--------车牌号-------------------- intarrtime;//--------到达/离开时间-------------}ELEMTP;//--------顺序栈的数据元素类型------typedefstruct{ ELEMTPelem[N]; inttop;}SqStack;//--------顺序栈类型----------------typedefstructnode{ intnum;//--------车牌号/便道上的车辆数量--- structnode*next;}QNode;//--------链队列的数据元素类型------typedefstruct{ QNode*front,*rear;}LQueue;//--------链队列类型----------------voidInitStack_Sq(SqStack*s);//--------初始化栈------------------intPush_Sq(SqStack*s,ELEMTPx);//--------入栈----------------------ELEMTPPop_Sq(SqStack*s);//--------出栈----------------------voidInitQueue_L(LQueue*q);//--------初始化队列----------------voidEnQueue_L(LQueue*q,intnum1);//--------入队列--------------------intDelQueue_L(LQueue*q);//--------出队列--------------------voidIncar(SqStack*s1,LQueue*q,ELEMTPx){//--------车辆x进入停车场----------- intf; f=Push_Sq(s1,x); if(f==0){//--------停车场栈s1已满入便道q----- EnQueue_L(q,x.num); cout<<"车牌号为"<<x.num<<"的车辆停在便道第"<<q->front->num<<"号车位上"<<endl; } else cout<<"车牌号为"<<x.num<<"的车辆驶入停车场第"<<s1->top<<"号车位上"<<endl;};//--------Incar--------voidOutcar(SqStack*s1,SqStack*s2,LQueue*q,ELEMTPx,ELEMTPy){ doubleMoney;//--------车辆x离开停车场 intn,f,A1,A2,B1,B2; QNode*p; f=0; while((s1->top>0)&&(f!=1)){//--------在栈s1中寻找车辆x y=Pop_Sq(s1); if(y.num!=x.num)n=Push_Sq(s2,y); elsef=1; } if(y.num==x.num){//--------寻找到车辆x------ //-----------收费计算------------------ A1=x.hh.hour; A2=y.hh.hour; B1=x.mm.min; B2=y.mm.min; Money=((A1-A2)*60+B1-B2)*M; cout<<"车牌号为"<<y.num<<"的车辆收费"<<Money<<"元"<<endl; while(s2->top>0){//--------将栈s2中的车辆倒回到栈s1中-- y=Pop_Sq(s2); f=Push_Sq(s1,y); } n=DelQueue_L(q); if(n!=NULL){//--------便道q上的第一辆车入栈s1------ y.num=n; y.arrtime=x.arrtime; f=Push_Sq(s1,y); cout<<"便道上车牌为"<<y.num<<"的车辆驶入停车场第"<<s1->top<<"号车位上\n"<<endl; } } else{//--------栈s1中未找到车辆x-------------- while(s2->top>0){//--------将栈s2中的车辆倒回到栈s1中----- y=Pop_Sq(s2); f=Push_Sq(s1,y); } p=q->front;//--------在便道q上找到车辆x-------------- f=0; while(f==0&&p->next!=NULL) if(p->next->num!=x.num) p=p->next; else{ A1=x.hh.hour; A2=y.hh.hour; B1=x.mm.min; B2=y.mm.min; p->next=p->next->next; q->front->num--; if(p->next==NULL) q->rear=q->front; cout<<A1<<endl; cout<<A2<<endl; cout<<B1<<endl; cout<<B2<<endl; Money=((A1-A2)*60+B1-B2)*O; cout<<"车牌号为"<<x.num<<"的车辆收费"<<Money<<"元"<<endl; f=1; } if(f==0) cout<<"输入数据错误,停车场和便道上均无"<<x.num<<"号车"<<endl; }}//--------Outcar--------voidDisplay(SqStack*s1,LQueue*q){//--------显示停车场的状况-------- intk;QNode*p; cout<<"停车场状况:"<<endl; if(s1->top!=0){ cout<<"车位车牌"<<endl; for(k=0;k<s1->top;k++) cout<<""<<k+1<<""<<s1->elem[k].num<<endl; } elsecout<<"停车场没有车辆"<<endl; cout<<"便道状况:"<<endl; if(q->front->num){ cout<<"车位车牌"<<endl; for(k=1,p=q->front->next;p;p=p->next) cout<<""<<k++<<""<<p->num<<endl; } elsecout<<"便道没有车辆"<<endl;}//--------Display--------voidmain(){ charch1,ch2; SqStack*s1,*s2; LQueue*q; ELEMTPx,y; s1=(SqStack*)malloc(sizeof(SqStack)); s2=(SqStack*)malloc(sizeof(SqStack)); q=(LQueue*)malloc(sizeof(LQueue)); InitStack_Sq(s1); InitStack_Sq(s2); InitQueue_L(q); cout<<"-----------------------停车场管理程序----------------------\n"; do{ cout<<"1--查看停车场状况2--车辆到达3--车辆离开4--程序结束\n"; cout<<"请选择:"; cin>>ch1; switch(ch1) { case'1': Display(s1,q);cout<<"---------------------------------------------------------------\n"; break; case'2': cout<<"输入车牌号:"; cin>>x.num; cout<<"输入时间(hh:mm)"; cin>>x.hh.hour; cin>>ch2;while(ch2!=':') { cout<<"输入到达时间(小时:分钟)"; cin>>x.hh.hour; cin>>ch2; }; while(ch2!=':'); cin>>x.mm.min; Incar(s1,q,x); cout<<"---------------------------------------------------------------\n"; break; case'3': cout<<"输入车牌号:"; cin>>x.num; cout<<"输入离开时间(hh:mm)"; cin>>x.hh.hour; cin>>ch2;while(ch2!=':') { cout<<"输入离开时间(小时:分钟)"; cin>>x.hh.hour; cin>>ch2; }; while(ch2!=':'); cin>>x.mm.min; Outcar(s1,s2,q,x,y); cout<<"---------------------------------------------------------------\n"; break; case'4': cout<<"程序结束"<<endl; break; default: cout<<"输入数据错误,重新输入"<<"\n\n\n"; cout<<"---------------------------------------------------------------\n"; break; cin>>ch1; } } while(ch1!='4');}//--------main--------voidInitStack_Sq(SqStack*s){ s->top=0;}intPush_Sq(SqStack*s,ELEMTPx){ if(s->top==N) return(0); else { s->elem[s->top]=x;s->top++; return(1); }}ELEMTPPop_Sq(SqStack*s){ ELEMTPx; if(s->top==0) { x.num=NULL; x.arrtime=NULL; return(x); } else { s->top--; return(s->elem[s->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 身体护理用化妆制剂市场发展现状调查及供需格局分析预测报告
- 2024年度建筑工程爆破作业专用承包合同
- 茶包托市场发展预测和趋势分析
- 04版瓷砖铺贴工程项目管理合同
- 2024年度幼儿园环境布置合同
- 英式橄榄球市场发展现状调查及供需格局分析预测报告
- 2024年度大连二手房买卖合同(含物业费)
- 空气净化器用过滤器市场需求与消费特点分析
- 2024年度环保产业园区污水处理工程合同
- 2024年度原材料采购供应合同
- 静脉用药安全输注药护专家指引
- 企业安全管理加强供应链安全与管理
- 工厂火灾安全管理与预防
- 合同Amazon店铺代运营协议
- 大工15春《水利工程实验(二)》实验报告
- 新版医学影像诊断学呼吸系统
- 牙科治疗中的药物管理与用药安全
- UN-美制螺纹及尺寸表
- 【环氧树脂复合材料研究进展文献综述6000字】
- DIN-EN-ISO-2409-CN国际标准文档
- 职业卫生检测考试真题十五
评论
0/150
提交评论