




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若车场内已停满n辆车,则后来的汽车要在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进去的车辆必须先推出车场为它让路,待该辆车开出大门以后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。试编写程序,模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达”还是“离去”(2)汽车牌照号码;(3)“到达”或“离去”的时刻。与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应缴的费用。(需另设一个栈,临时停放为让路而从车场退出的车。)#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 /便道结点,表示一辆汽车Datatype 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;/出栈,即离开停车场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.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;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 Deletebiandao(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 Showbiandao(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 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请选择命令: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) 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; / 输入数据不合法,回去重新输入 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑行业方案设计流程
- 高层建筑排水方案设计
- 无人花店的营销方案设计
- 吉林温泉设计咨询方案
- led双色屏幕施工方案
- 乡村建筑展板分析方案设计
- 校长在乡贤会上的讲话:承乡贤厚爱启教育新程
- 六年级下册语文教学计划
- 青少年元旦活动策划方案
- 2025年一级建筑师考试 建筑设计冲刺押题培训试卷详解
- 2025-2030中国钢丝行业市场发展趋势与前景展望战略分析研究报告
- 2025中国智能投影市场全产业链发展白皮书
- Unit 3 Keep Fit 单元教案 2024-2025学年人教版(2024)英语七年级下册
- GB/Z 45463-2025热喷涂涂层孔隙率的测定
- 庆祝中华全国总工会成立100周年回顾百年工运史汲取奋进力量
- 院前急救护理
- 健身气功项目办赛指南
- 《食品生产经营企业落实食品安全主体责任监督管理规定》解读与培训
- 2025届河南省五市高三第一次联考生物试题(原卷版+解析版)
- 学校食堂食品安全事故案例及教训
- 2025年全国企业员工全面质量管理知识竞赛题库及答案(共70题)
评论
0/150
提交评论