【程序设计与实践】实验五:停车场管理

设有一个可以停放n辆汽车的狭长停车场,它只有一个大门供车辆进出。
车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放(即最先到达的一辆车停放在停车场的最里面)。
如果停车场已放满n辆车,则以后到达的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车可以进入停车场。
停车场内如有某辆车要开走,则在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费,停留在便道上的车不收停车费。
编写程序对该停车场进行管理。
输入数据时,先输入一个整数n(n<=10),再输入若干组数据,每组数据包括3个数据项:汽车到达或离开的信息(A表示到达、D表示离开、E表示结束)、汽车号码、汽车到达或离开的时刻。当输入“E 0 0”时程序结束。
若有车辆到达,则输出该汽车的停车位置;若有车辆离开,则输出该汽车在停车场内停留的时间。
输入输出示例

3
A、1 1
1号车停入1号位
A、2 2
2号车停入2号位
A、3 3
3号车停入3号位
D、1 4
1号车出停车场,停留时间3
A、4 5
4号车停入3号位
A、5 6
5号车在便道上等待
D、4 7
4号车出停车场,停留时间2
5号车停入3号位
D、5 8
5号车出停车场,停留时间1
E 0 0

代码:

#include <bits/stdc++.h>#define MAX 10using namespace std;int n=0,a=0,b=0;typedef struct node{            //车辆信息结点int no;int reachtime;
}CarNode;typedef struct tingchechang{   //停车场CarNode *stack[MAX+1];int top;
}SeqStackCar;typedef struct car{                // 通道中车辆 CarNode *data;struct car *next;
}QueueNode;typedef struct tongdao{          //通道QueueNode *head;QueueNode *rear;
}LinkQueueCar;void InitStack(SeqStackCar *);//初始化栈
void InitQueue(LinkQueueCar *);//初始化队列
int Reach(SeqStackCar *,LinkQueueCar *);
void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);void zjm(){printf("\n");printf("                     程序设计与实践         实验(五)停车场管理\n");printf("\n");printf("              停车场管理说明\n");printf("          ========================                 \n");printf("\n");printf("1.先输入总车位数n,再输入若干组数据\n");printf("\n");printf("2.每组数据包括3个数据项:汽车到达或离开的信息<A表示到达,D表示离开,E表示结束>\n");printf("\n");printf("3.3个数据项:汽车到达或离开的信息,汽车号码,汽车到达或离开的时刻\n");printf("\n");printf("4.当输入‘E 0 0’时程序结束\n");printf("\n");
}int main(){zjm(); cout<<"请输入总车位数n:";cin>>n; cout<<endl;char flag;int i;SeqStackCar Enter,Temp;//定义+初始化 LinkQueueCar Wait;InitStack(&Enter);InitStack(&Temp);InitQueue(&Wait);while(1){cin>>flag>>a>>b;if(flag=='A'){i=Reach(&Enter,&Wait);if(i==0){cout<<"停车场已满!该车将进入等候通道!"<<endl;}else{cout<<a<<"号车停入"<<i<<"号位"<<endl;}}else if(flag=='D'){Leave(&Enter,&Temp,&Wait);}else if(flag=='E'&&a==0&&b==0){return 0;}}
}void InitStack(SeqStackCar *s){//初始化栈 int i;s->top=0;for(i=0;i<MAX;i++){s->stack[s->top]=NULL;}
}void InitQueue(LinkQueueCar *q){//初始化队列 q->head=(QueueNode *)malloc(sizeof(QueueNode));q->head->next=NULL;q->rear=q->head;
}int Reach(SeqStackCar *E,LinkQueueCar *W){CarNode *p;QueueNode *q;p=(CarNode *)malloc(sizeof(CarNode));//分配空间地址p->no=a;//读入车辆号码 if(E->top<n){E->top++;p->reachtime=b;//读入到达时间 E->stack[E->top]=p;return E->top;}else{q=(QueueNode *)malloc(sizeof(QueueNode));q->data=p;q->next=NULL;W->head->next=q;W->rear=q;return 0;}
}void Leave(SeqStackCar *E,SeqStackCar *T,LinkQueueCar *W){CarNode *p,*t;QueueNode *q;if(E->top>0){while(E->stack[E->top]->no!=a){//将目标车辆之后的车移入临时栈 T->top++;T->stack[T->top]=E->stack[E->top];E->stack[E->top]=NULL;E->top--;}p=E->stack[E->top];//读入目标数据 E->stack[E->top]=NULL;E->top--;while(T->top>=1){//将临时栈重新移入停车场 E->top++;E->stack[E->top]=T->stack[T->top];T->stack[T->top]=NULL;T->top--;}cout<<a<<"号车出停车场,停留时间"<<b-p->reachtime<<endl;if((W->head!=W->rear)&&E->top<MAX){// 等候通道中的车辆进入停车场q=W->head->next;t=q->data;E->top++;printf("等候通道中的%d号车进入停车场的%d号位.",t->no,E->top);t->reachtime=b;//记录进入停车场时间 W->head->next=q->next;//删除结点 if(q==W->rear)   W->rear=W->head;//如果队列中只有一个结点 E->stack[E->top]=t;free(q);}else{cout<<"等候通道里没有车了。"<<endl;}}else  cout<<"停车场已经没有车了!"<<endl;
}

【程序设计与实践】实验五:停车场管理相关推荐

  1. 数据结构 实验五 停车场管理

    实验五 停车场管理 1.实验目的: (1)掌握栈的使用方法. (2)掌握队列的使用方法. 2.实验环境与设备: 已安装Visual Studio 2010(或其以上版本)集成开发环境的计算机. 3.实 ...

  2. linux内存实验,LINUX编程-实验五 内存管理实验

    实验五内存管理实验 1.目的要求 (1)学习使用内存管理库函数. (2)学习分析.改正内存错误. 2.实验内容 (1)内存库函数实验 ●malloc函数 原型:extern void *malloc( ...

  3. #《JAVA程序设计》 20155214 实验五 网络编程与安全

    <JAVA程序设计> 20155214 实验五 网络编程与安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验要求 要求一 结对实现中缀表达式转后缀 ...

  4. 计算机网络基础北邮,北邮 大三下 计算机网络技术实践 实验五_图文

    北邮 大三下 计算机网络技术实践 实验五_图文 更新时间:2017/1/22 21:54:00  浏览量:691  手机版 实验报告 课程名称: 计算机网络技术基础 实验名称: 实验五 以太网数据传输 ...

  5. 实验五 进程管理命令

    1.实验目的 (1)了解如何监视系统运行状态 (2)掌握查看.删除进程的正确方法 (3)掌握命令在后台运行的用法 (4)掌握进程手工.调度启动的方法 2.常用命令 who 查看当前在线用户 top 监 ...

  6. 【程序设计与实践】实验二:个人资金账户管理

    实验二:个人资金账户管理 题目: 阅读下列"资金账户的管理"程序,对程序进行调试.改错,并增加函数,使之符合如下具体功能. 1) 资金账户的信息统一放在*随机文件中,该随机文件包括 ...

  7. 【程序设计与实践】实验三:自动售货机

    实验三:自动售货机 题目: 图所示为简易自动售货机,物品架1.2上共有10样商品,按顺序进行编号分别为1~10,标有价格与名称,如下图: 用户购买商品的操作方法如下. 1.售货机物品架上共有10样商品 ...

  8. c语言程序设计 实验五数组6,c语言实验五数组程序设计解答.doc

    c语言实验五数组程序设计解答.doc 实验五数组应用(二)一.实验目的1(掌握二维数组的定义和初始化.2(掌握二维数组元素的引用及其应用.3(掌握字符数组的定义和初始化.4(掌握字符数组元素的引用及其 ...

  9. 20172329 2017-2018-2 《程序设计与数据结构》实验五报告

    这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程: ...

最新文章

  1. 一款jQuery实现重力弹动模拟效果特效,弹弹弹,弹走IE6
  2. 大数据自学——Spark
  3. 腾讯2014年实习生招聘笔试面试经历
  4. Android中Services简析
  5. 基于固定坐标与基于参考坐标系得到的机械手的微分运动不同
  6. InDesign 教程,如何创建沉浸式文档?
  7. 11_使用ehcache缓存进行商品分类展示优化
  8. java删除指定文件后重新建立文件系统_java file 操作之创建、删除文件及文件夹...
  9. 【SOLIDWORKS-详细记录】解决默认模板无效问题及添加自定义模板
  10. win10计算机删除了怎么恢复,win10文件误删除怎么恢复-互盾数据恢复软件
  11. 计算机密码学论文,密码学论文写作范例论文
  12. 华为手机灵敏度设置_和平精英灵敏度怎么调最稳华为手机?华为二指灵敏度调整设置一览[多图]...
  13. root后怎么删除授权管理,Root授权管理
  14. Docker常用基础命令
  15. Ubuntu安装迅雷,让下载变得轻松
  16. 我的世界java版如何装mod_我的世界MOD怎么安装 MOD安装简易教程
  17. python自动合并excel_python-Excel自动化
  18. RASP之IAST扫描器的安装及使用
  19. 安卓系统定制脱壳之android源码增加产品
  20. 在Linux系统中如何把文件拷贝到U盘

热门文章

  1. 机器学习中的特征变量及处理总结
  2. 21 | 毕业了,户口和档案怎么安排
  3. 云计算专业防火墙NAT实验
  4. 计算机毕业设计 基于java web的在线考试系统(源码+论文)
  5. 【机器学习】方差为何除以n-1
  6. future-swap资金费率套利-change专题
  7. 计算机如何对多个用户进行管理,如何给多个账户设置密码?-用户账户控制设置...
  8. win10系统遭遇VMware USB Arbitration Service 无法启动,错误31的解决方案
  9. 小度路由器离线下载根本就是垃圾
  10. 北大百练 4075. 矩阵旋转