版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若车场内已停满n辆车,则后来的汽车要在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进去的车辆必须先推出车场为它让路,待该辆车开出大门以后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。试编写程序,模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达”还是“离去”(2)汽车牌照号码;(3
2、)“到达”或“离去”的时刻。与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应缴的费用。(需另设一个栈,临时停放为让路而从车场退出的车。)#include#define m 5using namespace std;typedef int datatype;typedef struct datatype bianhaom;int top; int hm; /时 int mm; /分 int sm; /秒seqstack; /停车场栈的定义typedef struct node /便道结点,表示一辆汽车datat
3、ype bianhao; struct node *next;node;typedef structnode *front;node *rear;int count;biandao; /便道/停车场顺序栈初始化void initseqstack(seqstack *t)t-top=-1;/进栈,即进入停车场int push(seqstack *t,int x,int h,int m,int s)if(t-top=m-1)return 0; /停车场栈已满t-top+;t-bianhaot-top=x;t-ht-top=h;t-mt-top=m;t-st-top=s;return 1;/出栈,即
4、离开停车场int pop(seqstack *t,int *x,int *h,int *m,int *s)if(t-top=-1)return 0;else*x=t-bianhaot-top;*h=t-ht-top;*m=t-mt-top;*s=t-st-top;t-top-;return 1;/查找某牌照的车在停车场中的位置,若找到则返回其位置,否则返回-1int find(seqstack t,int x)int i; for(i=0;it.top)return(-1);else return(i);/判断停车场内是否已满int isseqstackfull(seqstack t)if(t
5、.top=m-1)return 1;else return 0;/判断停车场内是否已没有车辆int isseqstackempty(seqstack t)if(t.top=-1)return 1;else return 0;/依次显示停车场内停放的所有车辆void showseqstack(seqstack t)int i;if(t.top=-1)cout停车场内没有停放车辆endl;else for(i=0;i=t.top;i+) cout牌照:t.bianhaoifront=new node;if(q-front!=null)q-rear=q-front;q-front-next=null
6、;q-count=0;return(true);else return(false);/入队操作,即当停车场满了的时候,再到达的车辆进去便道队列int enterbiandao(biandao *q,int x)node *newnode;newnode=new node;if(newnode!=null)newnode-bianhao=x;newnode-next=null;q-rear-next=newnode;q-rear=newnode; q-count+;return(true);else return(false);/出队操作,即便道上的车辆从便道开出来int deletebian
7、dao(biandao *q,int *x)node *p;if(q-front=q-rear)return(false);p=q-front-next;q-front-next=p-next;if(q-rear=p)q-rear=q-front;*x=p-bianhao;free(p);q-count-;return(true);/判断便道队列是否为空int isbiandaoempty(biandao q)if(q.front=q.rear)return(true);else return(false); /当count=0时,就空了/依次显示便道上停放的所有车辆void showbian
8、dao(biandao q)node *p;p=q.front-next;if(p=null)cout便道上没有停放车辆!endl;else while(p!=null) cout牌照:bianhaonext;36/计算停留时间差double time(int h1,int m1,int s1,int h2,int m2,int s2)double p,q;p=h1*3600+m1*60+s1-(h2*3600+m2*60+s2);q=(double)p/3600;return(q); /计算停车费用double cost(double t,int u)return(t*u);/主函数void
9、 main()double time,cost;int ch;int x,*y,z;int i,flag=1,h,m,s,unit_price,hh,mm,ss;y=new int;seqstack *t; /定义停车栈t=new seqstack;initseqstack(t);biandao *q; /定义便道队列q=new biandao;initbiandao(q);seqstack *r; /定义让路栈r=new seqstack;initseqstack(r);cout请设置停车费用单价:(_元/小时)unit_price;while(flag) cout*endl; cout请选
10、择命令:endl1:到达 endl2:离开 endl3:依次显示停车场内停放车辆endl4:依次显示便道上停放车辆 endl5:结束endl; cout*ch; switch(ch) case 1: cout请输入到达的汽车牌照号码:x; if(isseqstackfull(*t) cout停车场已满,请在便道等候!endl; enterbiandao(q,x); cout将此车停放在便道的count号位置!endl; else while(1) cout请输入到达的时间(例如,21 08 23):hms; if (h23) continue; / 输入数据不合法,回去重新输入 if (m59
11、) continue; if (s-1 & s61)break; / 输入时间全部合法,退出循环 push(t,x,h,m,s); cout将此车停放在停车场的top+1号停车位置endl; break; case 2: if(isseqstackempty(*t) cout停车场内已没有车辆endl; else cout请输入要离开的汽车的车牌照号码:x; if(find(*t,x)=-1) cout停车场内没有该汽车!endl; else /有该号码的汽车 while(1) cout请输入离开的时间(例如,23 58 03):hms; if (h23) continue; / 输入数据不合
12、法,回去重新输入 if (m59) continue; if (s-1 & stop) pop(t,y,&hh,&mm,&ss); /要离开的车辆正好是最后一辆进入停车场的车time=time(h,m,s,hh,mm,ss); cout停留时间为:time小时endl; /结账 cost=cost(time,unit_price);cout应缴费用为:cost元endl; else for(i=(find(*t,x)+1);itop;)/该车不是最后一辆进入停车场的车,其它车要让路 pop(t,y,&hh,&mm,&ss); push(r,*y,hh,mm,ss); /进入让路栈r pop(t,y,&hh,&mm,&ss); /要离开的车辆离开了 time=time(h,m,s,hh,mm,ss); cout停留时间为:time小时endl; /结账 cost=cost(time,unit_price); cout应缴费用为:cost元endl;for(i=0;itop;) /让路的车辆重新回到停车场pop(r,y,&hh,&mm,&ss);push(t,*y,hh,mm,ss); if(!isbiandaoempty(*q) deletebi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业个人年度工作计划
- 冀教版小学五年级上册数学教学计划
- 幼儿教学计划模板
- 年化妆品销售工作计划范文
- 2025年女工个人工作计划范文
- 年度教育工作计划
- 2025年办公室秘书工作计划
- 办公室秘书年度工作计划例文
- 美团芒果杯 推广计划
- 《氧化还原滴定》课件
- oa系统合同范例
- 建设精神病医院
- 《文明礼仪概述培训》课件
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 跨文化沟通心理学智慧树知到期末考试答案2024年
- 《中华民族共同体概论》考试复习题库(含答案)
- 标准的指令性目标问题解决型案例
- 穿越220kV线路施工方案
- 2011辛卯年风水布局概述
- 养殖户粪污污染情况整改报告2篇
- Q-FT B039-2006汽车产品油漆涂层技术条件
评论
0/150
提交评论