版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设停车场是一个可停放n 辆车的狭长通道,且只有一个大门可供汽车进出。在停车场,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若车场已停满 n 辆车,则后来的汽车要在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。 当停车场某辆车要离开时, 在它之后进去的车辆必须先推出车场为它让路,待该辆车开出大门以后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。试编写程序,模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。从终端读入汽车到达或离去的数据,每组数据包括三项: (1) 是“到达”还是“离去” (2) 汽车牌
2、照; (3) “到达”或“离去”的时刻。与每组输入信息相应的输出信息为: 如果是到达的车辆, 则输出其在停车场中或便道上的位置; 如果是离去的车辆, 则输出其在停车场中停留的时间和应缴的费用。 (需另设一个栈,临时停放为让路而从车场退出的车。)#include<iostream>#define M 5using namespace std;typedef int Datatype;typedef structDatatype bianhaoM;int top;int hM;/ 时int mM;/ 分int sM;/ 秒Seqstack;/ 停车场栈的定义typedef struct
3、 Node/ 便道结点,表示一辆汽车Datatype bianhao;struct Node *next;node;typedef struct专业资料node *front;node *rear;int count;biandao;/ 便道/ 停车场顺序栈初始化void InitSeqstack(Seqstack *t)t->top=-1;/ 进栈,即进入停车场int Push(Seqstack *t,intx,int h,int m,int s)if(t->top=M-1)return 0;/ 停车场栈已满t->top+;t->bianhaot->top=x;
4、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;/ 查找某牌照的车在停车场中的位置, 若找到则返回其位置,否则返回 -1i
5、nt Find(Seqstack t,intx)int i;for(i=0;i<=t.top;i+)if(t.bianhaoi!=x)continue;elsebreak;if(i>t.top)return(-1);elsereturn(i);/ 判断停车场是否已满int IsSeqstackFull(Seqstack t)if(t.top=M-1)return 1;elsereturn 0;/ 判断停车场是否已没有车辆专业资料int IsSeqstackEmpty(Seqstack t)if(t.top=-1)return 1;elsereturn 0;/ 依次显示停车场停放的所
6、有车辆void ShowSeqstack(Seqstack t)int i;if(t.top=-1)cout<<" 停车场没有停放车辆 "<<endl; elsefor(i=0;i<=t.top;i+)cout<<"牌照: "<<t.bianhaoi<<endl;/ 队列初始化int Initbiandao(biandao *Q)Q->front=new node;if(Q->front!=NULL)Q->rear=Q->front;Q->front->
7、next=NULL;Q->count=0;return(true);else return(false);/ 入队操作,即当停车场满了的时候,再到达的车辆进去便专业资料道队列int Enterbiandao(biandao *Q,intx)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(
8、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)
9、if(Q.front=Q.rear)return(true);elsereturn(false);/ 当 count=0时,就空了/ 依次显示便道上停放的所有车辆void Showbiandao(biandao Q)node *p;p=Q.front->next;if(p=NULL)cout<<" 便道上没有停放车辆 !"<<endl; elsewhile(p!=NULL)cout<<"牌照: "<<p->bianhao<<endl;p=p->next;36/ 计算停留时间差d
10、ouble 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;intx,*y,z;int i,flag=1,h,m,s,unit_price,hh,mm,ss;y=new int;Seqstack*t;/ 定义停车栈t=n
11、ew Seqstack;InitSeqstack(t);biandao *Q;/ 定义便道队列Q=new biandao;Initbiandao(Q);Seqstack*r;/ 定义让路栈r=new Seqstack;InitSeqstack(r);cout<<"请设置停车费用单价: ( _元 / 小时) "<<endl;cin>>unit_price;while(flag)cout<<"*"<<endl;专业资料cout<<" 请 选 择 命 令 : "<
12、<endl<<"1: 到 达 "<<endl<<"2: 离开 "<<endl<<"3: 依次显示停车场停放车辆"<<endl<<"4:依次显示便道上停放车辆"<<endl<<"5:结束"<<endl;cout<<"*"<<endl;cin>>ch;switch(ch)case 1:cout<<"
13、请输入到达的汽车牌照:"<<endl;cin>>x;if(IsSeqstackFull(*t)cout<<"停车场已满,请在便道等候!"<<endl;Enterbiandao(Q,x);cout<<"将此车停放在便道的"<<Q->count<<"号位置 !"<<endl;elsewhile(1)cout<<"请输入到达的时间( 例如,2108 23) : "<<endl;cin&g
14、t;>h>>m>>s;if(h<0|h>23)continue;/ 输入数据不合法,回去重新输入if (m<0 | m>59) continue;if (s>-1 && s<61)break;/ 输入时间全部合法,退出循环专业资料/ 输入时间全部合Push(t,x,h,m,s);cout<<"将此车停放在停车场的"<<t->top+1<<"号停车位置 "<<endl;break;case 2:if(IsSeqstackE
15、mpty(*t)cout<<"停车场已没有车辆"<<endl;elsecout<<"请输入要离开的汽车的车牌照:"<<endl;cin>>x;if(Find(*t,x)=-1)cout<<"停车场没有该汽车!"<<endl;else/ 有该的汽车while(1)cout<<"请输入离开的时间( 例如,2358 03) : "<<endl;cin>>h>>m>>s;if(h&
16、lt;0|h>23)continue;/ 输入数据不合法,回去重新输入if (m<0 | m>59) continue;if (s>-1 && s<61)break;法,退出循环专业资料if(Find(*t,x)=t->top)Pop(t,y,&hh,&mm,&ss);/ 要离开的车辆正好是最后一辆进入停车场的车 time=Time(h,m,s,hh,mm,ss);cout<<"停留时间为:"<<time<<"小时 "<<endl;
17、/ 结账cost=Cost(time,unit_price);cout<<"应 缴 费 用 为 : "<<cost<<"元"<<endl;elsefor(i=(Find(*t,x)+1);i<=t->top;)/该车不是最后一辆进入停车场的车,其它车要让路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;i<=r->top;)/ 让路的车辆重新回到停车场专业资料Pop(r,y,&hh,&mm,&ss);Push(t,*y,hh,mm,ss);if(!Isbia
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026大理二建考试题库及答案
- 卷04-2023年高考英语模拟卷(新高考I卷)
- 中建集团笔试题目大全
- 考研政治(马克思主义基本原理概论)模拟试卷239
- 历年论证有效性分析真题及答案
- 生产知识问答题目与参考答案
- 遥感概论进阶试题及最终答案
- 2027届内蒙古自治区乌海市七年级数学第一学期期末联考模拟试题含解析
- 山东省临清市2027届数学八年级第一学期期末统考试题含解析
- 幼小衔接之数学启蒙:从容上小学
- 食管异物穿孔护理查房
- 【感恩教育】教师节主题班会《有一种炫耀是“我的老师很严格”》(课件)
- 医院三管三必须培训课件
- 华为资源池管理办法
- 收银员的职业道德培训
- 醉驾担保协议书
- 甲状腺细针穿刺细胞学病理诊断
- 食品微生物控制加工技术
- 创新方法大赛TRIZ航天-氢敏变色材料
- 玻尔的原子模型
- CB/T 3780-1997管子吊架
评论
0/150
提交评论