题目

设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入停车场;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场;每辆停放在车场的车在它离开停车场时,必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

Input

输入数据的第一行包含两个正整数n和m(n,m<=10)分别表示停车场的容量和每小时停车费用。从第2行开始,每行表示一组输入数据,由三项内容构成:(i) 一个大写英文字母,表示汽车“到达”或“离开”信息,输入'A'时,表示汽车达到,输入'D'时,表示汽车离开,输入'E'时,表示程序结束;(ii) 一个正整数X,表示汽车牌照号;(iii) 一个正整数T,表示汽车到达或离开的时刻。这三项内容之间以一个空格间隔。

Output

对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离开,则输出汽车在停车场内停留的时间(单位是小时)和应交纳的费用(在便道上停留的时间不收费),假设停车费为每小时m元。具体分为如下几种情况:
(1)如果汽车X到达,且停车场未满,则输出如下信息:“汽车X停靠在停车场Y号位置”(其中:X为汽车牌照号,Y为停车场车位序号,1≤Y≤n)
(2)如果汽车X到达,但停车场已满,则输出如下信息:“汽车X停靠在便道的Z号位置”(其中:X为汽车牌照号,Z为便道的车位序号,1≤Z)
(3)如果汽车X离开,且X在停车场内,则输出如下信息:“汽车X停车H小时,缴纳停车费M元”(其中:X为汽车牌照号,H为停车时间,M为停车费用)
(3.1)如果此时便道上的停车队列不为空,则将便道上的第一辆汽车停入停车场,并输出如下信息:“汽车X停靠在停车场Y号位置”(其中:X为汽车牌照号,Y为停车场车位序号,1≤Y≤n)
(4)如果汽车X离开,但停车场没有牌照X的汽车,则输出如下信息:“汽车X不在停车场”(其中:X为汽车牌照号)

#include<iostream>
using namespace std;
int n=0, m=0;
char ch; int temp_num; int temp_time;
class Node
{int num;int time;Node* next;
public:Node(){num = 0;time = 0;next = NULL;}Node(int x,int y){num = x;time = y;next = NULL;}friend class Stack;friend class Queue;friend void solve();Node operator=(const Node& p){this->num = p.num;this->time = p.time;this->next = p.next;return *this;}
};
class Stack
{Node* head;int size;
public:friend void solve();Stack(){head = new Node;size = 0;}void Push(int x,int y)  //入栈{Node* s = new Node(x, y);s->next = head->next;head->next = s;size++;}void Pop()    //出栈{if (size == 0)return;Node* p = head->next;head->next= head->next->next;delete p;size--;}Node Top(){Node p;if (size == 0)return p;p = *(head->next);return p;}int get_length(){return size;}bool Exist(int x){Node* p = head->next;while (p){if (p->num == x)return true;p = p->next;}return false;}
};
class Queue
{Node* head;Node* rear;int size;
public:friend void solve();Queue(){rear = head = new Node;size = 0;}bool Exist(int x){Node* p = head->next;while (p){if(p->num == x)return true;p = p->next;}return false;}void Enter(int x,int y)   //入队{Node* s = new Node(x,y);rear->next = s;rear = rear->next;size++;}void Leave()     //出队{if (size == 0)return;Node* p = head->next;head->next = head->next->next;delete p;size--;}Node Front(){Node p;if (size == 0)return p;p = *(head->next);return p;}int get_length(){return size;}
};
void solve()
{Stack s; //停车场Stack t; //临时停车场Queue q; //便道cin >> n >> m;while (cin >> ch && ch != 'E'){cin >> temp_num >> temp_time;if (ch == 'A')//进入{if (s.get_length() < n) //进入停车场{s.Push(temp_num, temp_time);cout << "汽车" << temp_num << "停靠在停车场" << s.get_length() << "号位置" << endl;}else //进入便道{q.Enter(temp_num, temp_time);cout << "汽车" << temp_num << "停靠在便道的" << q.get_length() << "号位置" << endl;}}else if (ch == 'D')//离开{int time = 0; int flag = 0;if (!s.Exist(temp_num))//该车不在停车场中{cout << "汽车" << temp_num << "不在停车场" << endl;while (q.Front().num != temp_num && q.Exist(temp_num)){q.Enter(q.Front().num, q.Front().time);q.Leave();}if (q.Front().num == temp_num){q.Enter(q.Front().num, q.Front().time);q.Leave();}}else //该车在停车场中{while (s.Exist(temp_num) && s.get_length() != 0){if (s.Top().num != temp_num){t.Push(s.Top().num, s.Top().time);//出s栈,入t栈s.Pop();}else{time = temp_time - s.Top().time;cout << "汽车" << s.Top().num << "停车" << time << "小时,缴纳停车费" << time * m << "元" << endl;s.Pop();flag = 1;break;}}while (t.get_length() != 0)    //压回s栈{s.Push(t.Top().num, t.Top().time);t.Pop();}if (q.get_length() != 0 && flag == 1) //便道汽车进停车场{s.Push(q.Front().num, temp_time);//进入停车场q.Leave();                       //便道上离开cout << "汽车" << s.Top().num << "停靠在停车场" << s.get_length() << "号位置" << endl;}}}}
}
int main()
{solve();
}

测试用例

Sample Input

4 5
A 1 10
A 2 15
A 3 16
D 4 17
D 3 20
A 4 21
A 5 22
A 6 23
A 7 24
A 8 25
D 3 25
D 4 25
D 5 26
A 9 26
A 10 27
A 11 28
A 12 29
A 13 30
D 13 35
D 1 36
D 2 37
D 3 38
D 4 38
D 5 38
D 6 38
D 7 39
D 8 40
D 9 41
D 10 44
D 11 46
D 12 50
D 13 60
D 14 70
E

Sample Output

汽车1停靠在停车场1号位置
汽车2停靠在停车场2号位置
汽车3停靠在停车场3号位置
汽车4不在停车场
汽车3停车4小时,缴纳停车费20元
汽车4停靠在停车场3号位置
汽车5停靠在停车场4号位置
汽车6停靠在便道的1号位置
汽车7停靠在便道的2号位置
汽车8停靠在便道的3号位置
汽车3不在停车场
汽车4停车4小时,缴纳停车费20元
汽车6停靠在停车场4号位置
汽车5停车4小时,缴纳停车费20元
汽车7停靠在停车场4号位置
汽车9停靠在便道的2号位置
汽车10停靠在便道的3号位置
汽车11停靠在便道的4号位置
汽车12停靠在便道的5号位置
汽车13停靠在便道的6号位置
汽车13不在停车场
汽车1停车26小时,缴纳停车费130元
汽车8停靠在停车场4号位置
汽车2停车22小时,缴纳停车费110元
汽车9停靠在停车场4号位置
汽车3不在停车场
汽车4不在停车场
汽车5不在停车场
汽车6停车13小时,缴纳停车费65元
汽车10停靠在停车场4号位置
汽车7停车13小时,缴纳停车费65元
汽车11停靠在停车场4号位置
汽车8停车4小时,缴纳停车费20元
汽车12停靠在停车场4号位置
汽车9停车4小时,缴纳停车费20元
汽车13停靠在停车场4号位置
汽车10停车6小时,缴纳停车费30元
汽车11停车7小时,缴纳停车费35元
汽车12停车10小时,缴纳停车费50元
汽车13停车19小时,缴纳停车费95元
汽车14不在停车场

c++栈和队列的应用(停车问题)相关推荐

  1. 实习二 栈、队列和递归算法设计 (题目:停车场管理 )

    一.需求分析 1.每一组输入数据包括:汽车"到达"或"离去"信息.汽车牌照号码以 及到达或离去的时刻. 2.输出信息:若是车辆到达,则输出汽车在停车场内或便道上 ...

  2. sdut 2088 数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  3. Java停车场管理系统使用栈和队列任务台程序

    运行截图: (栈和队列) 点此去下载 在学习过程中,总结到的规律: 栈功能(仅有增删,无查改) • 入栈–增 • 出栈–删 队列功能(仅有增删,无查改) • 入队–增 • 出队–删 二者由于自身特性限 ...

  4. C语言停车场管理系统,使用栈和队列实现

    使用栈和队列实现的狭长停车场管理 1.情况说明:  (1)停车场结构为一条狭长的通道(可视为栈).  (2)若停车场内车辆已经停满,后来的车需要在路边排队等待,库内有车出来才能入库    (可视为队列 ...

  5. 停车场管理系统(C语言顺序栈+链栈+链队列)

    一.实验目的 1.根据停车场管理系统的要求,利用结构化程序设计方法以及C的编程思想来完成系统的设计,使用数据结构中的栈.队列进行分析: 2.按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用 ...

  6. 数据结构上机应用:栈和队列

    问题描述: 某单位停车场共有n个车位,是一个一端封闭的只有一排的狭长通道,车辆只能由左向右依次停放,最右端有一个大门供车辆出入.当车位未满时,车辆可以进入并停在最后一辆车的后面:当车位已满时,车辆需在 ...

  7. 用链表,栈,队列实现简单的停车场项目

    学习了链表,栈,队列之后写了一个停车场项目,但是功能还不是太完善,时间忘了插入,通过咨询别人,完善了时间函数,完成了这个项目. 问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达 ...

  8. 数据结构课设--2停车场管理(栈和队列的应用)

    2.停车场管理(栈和队列的应用) [问题描述] 设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的 ...

  9. (算法入门)栈和队列-停车场管理系统

    一.实验目的 通过停车场管理的程序设计,帮助学生熟练掌握栈和队列的基本操作及用栈与队列解决具体问题的基本方法. 二.实验内容 设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出. 汽 ...

  10. 数据结构栈和队列(以停车场管理题目为例)

    /*实验 栈和队列实验 实验目的 熟悉栈和队列的基本特性,掌握栈和队列基本运算的实现过程. 时间要求:4+4学时 问题描述: 设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个 大门可供汽车进 ...

最新文章

  1. Quadrant TableViewCell
  2. easybcd安装Ubuntu
  3. python初学者代码-Python-为什么Python是初学者的完美选择?
  4. 转:手机流畅的决定性因素
  5. javascript学习总结1
  6. JUnit 5 –参数化测试
  7. TCP、UDP套接字的数据传输
  8. 异步读取数据库中数据
  9. 在delphi原有控件基础上画图
  10. java安卓游戏源码下载_77个安卓游戏 android源码
  11. 腾讯云消息队列CMQ
  12. 【MYSQL】mysql.sock连接问题
  13. 图片转公式再转到word或者wps里面
  14. ilo管理脚本 hponcfg方式
  15. android listview 导航条,Android侧边导航栏+ListView基础实践
  16. 觉得VR头显太笨重?轻便的VR“神器”来了
  17. 【TestDirector】常见问题分析
  18. Java Learning 000 搭建开发环境
  19. metabase使用教程
  20. 通过手机记事本发微信是避免出错的好办法

热门文章

  1. antd Design Form表单的简单理解
  2. unity工具类篇 unity 计时器
  3. 代码随想录哈希表——四数之和
  4. pq分解法潮流计算c语言编程 因子表,PQ分解法潮流计算编程实例.pdf
  5. 海康威视的综合安防管理平台部署
  6. 深度剖析ja3指纹及突破
  7. html5 canvas画布居中以及例子
  8. F608不慎开启防盗,忘记密码(转)
  9. FD的设置和抓取python请求包
  10. 一款简洁实用电脑屏幕录制工具