下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设停车场是一个可停放n 辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若车场内已停满n 辆车, 则后来的汽车要在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进去的车辆必须先推出车场为它让路,待该辆车开出大门以后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。试编写程序,模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。 从终端读入汽车到达或离去的数据,每组数据包括三项:(1) 是“到达”还是“离去”(2) 汽车牌
2、照号码;(3) “到达”或“离去”的时刻。 与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应缴的费用。(需另设一个栈,临时停放为让路而从车场退出的车。)#include#define M 5using namespace std;typedef int Datatype;typedef structDatatype 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);elsereturn(i);/判断停车场内是否已满int IsSeqstackFull(Seqstack t)if(t.to
5、p=M-1)return 1;elsereturn 0;/判断停车场内是否已没有车辆int IsSeqstackEmpty(Seqstack t)if(t.top=-1)return 1;elsereturn 0;/依次显示停车场内停放的所有车辆void ShowSeqstack(Seqstack t)int i;if(t.top=-1)cout 停车场内没有停放车辆endl;elsefor(i=0;i=t.top;i+)cout 牌照: t.bianhaoifront=new node;if(Q-front!=NULL)Q-rear=Q-front;Q-front-next=NULL;Q-c
6、ount=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(b
7、iandao *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);elsereturn(false);/当count=0 时,就空了/依次显示便道上停放的所有车辆void Showbiandao(b
8、iandao Q)node *p;p=Q.front-next;if(p=NULL)cout 便道上没有停放车辆!endl;elsewhile(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
9、()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); coutunit_price; while(flag) /定义便道队列/定义停车栈/定义让路栈_元 /小时)endl;cout* endl;cout 请 选 择
10、命 令 :endl1: 到 达endl2: 离开 endl3: 依次显示停车场内停放车辆 endl4: 依次显示便道上停放车辆endl5: 结束 endl;cout* ch;switch(ch)case 1:coutx;if(IsSeqstackFull(*t)cout 停车场已满,请在便道等候Enterbiandao(Q,x);cout 将 此 车 停 放 在count 号位置 !endl;elsewhile(1)endl;!endl;便道的cout 请输入到达的时间(例如,21continue;/车场的08 23): hms;if (h23)/ 输入数据不合法,回去重新输入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;elsecout 请输入要离开的汽车的车牌照号码:x;if(Find(*t,x)=-1)cout 停车场内没有该汽车!endl;else/有该号码的汽车while(1)cout 请输入离开的时间(例如, 2358 03): hms;if (h23) continue;/ 输入数据不合法,回去重新输入if
12、 (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;elsefor(i=(Find(*t,x)+1);itop;)/ 该 车不是最后一辆进入停车场的车,其它车要让路Pop(t,y,&hh,&mm,&ss);Push(r,*y,hh,mm,ss);/进入让路栈rPop(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)Dele
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宁波市升力同创科技咨询服务有限公司招聘备考题库及答案详解一套
- 高中语文课堂数字化教学任务智能分配对学生文学素养的影响教学研究课题报告
- 浙商银行金华分行2025年四季度社会招聘备考题库及完整答案详解一套
- 2025年长沙市长沙星沙街道盼盼幼儿园教师招聘备考题库有答案详解
- 小学道德与法治六年级下册4.8 科技发展 造福人类 第二课时 课件内嵌视频
- 2025年独山县百泉镇村(社区)后备干部招募备考题库及答案详解一套
- 简约文艺风白色家居产品手册
- 2025年贵州翎航拓达科技有限公司招聘备考题库及完整答案详解一套
- AI训练设备姿态传感器集成训练系统开发课题报告教学研究课题报告
- 初中数学教学中探究式学习的策略研究与应用教学研究课题报告
- 2025年淮北市相山区公开招考村(社区)后备干部66人备考题库及一套完整答案详解
- 2025年农业农村部耕地质量和农田工程监督保护中心度面向社会公开招聘工作人员12人备考题库有答案详解
- 水平定向钻施工组织设计方案(顶管组织设计)
- 2025年护士长护理管理考核题目及答案
- 三防漆涂覆流程及质量控制标准
- 新生儿败血症诊断及治疗专家共识(2024)解读
- 知道智慧树网课《统计学(中南财经政法大学)》课后章节测试答案
- 山东省齐鲁名校大联考2025-2026学年高三上学期10月月考英语试题
- 2025年贵州锦麟化工有限责任公司公开招聘13人笔试题库历年考点版附带答案详解
- 河北省部分地区2023-2024学年度高二上学期期末考试英语试题(解析版)
- GB/T 9390-2017导航术语
评论
0/150
提交评论