版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
暨南大学数据结构实习报告题目:停车场模拟程序专业: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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 红河学院《政治学研究方法》2022-2023学年第一学期期末试卷
- 有关幸福的演讲稿汇编6篇
- 有关三分钟的演讲稿模板合集七篇
- 我是猫读后感
- 黑龙江工程学院《公路工程估价》2021-2022学年第一学期期末试卷
- 黑龙江工程学院《材料分析测试技术》2022-2023学年第一学期期末试卷
- 黑龙江东方学院《纳税申报实训》2022-2023学年第一学期期末试卷
- 黑龙江东方学院《给水工程》2023-2024学年第一学期期末试卷
- 黑龙江大学《种子病理学》2022-2023学年第一学期期末试卷
- 黑龙江大学《土壤调查与制图》2022-2023学年第一学期期末试卷
- 消防安全安全隐患排查整改台帐
- 医务科年度工作汇报与计划精编ppt
- 学术论文的选题课件
- 《野猫的城市》幻灯片
- 福建广播电视大学中国现当代文学名著导读(2)-形成性考核一答案
- 北师大版三年级数学上册第六单元《乘法》知识点梳理复习ppt
- 《声音的产生和传播》课例评析
- 人教版英语九全 Unit 8 It must belong to Carla. Section A(3a-3c)教案
- 设计史论题目练习复习试题
- 《行政组织学通论》课件第09章行政组织目标管理
- 变频器说明书invt
评论
0/150
提交评论