栈和队列的应用之停车问题

傷城~ 2023-09-30 22:24 59阅读 0赞

题目:

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

基本要求:

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理.每一组输入数据包括三个数据:汽车的“到达”(’A’表示)或“离去”(’D’表示)信息,汽车标识(牌照号)以及到达或离去的时刻.对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或者便道上的停车位置;若是车辆离去,则输出汽车在停车场停留的时间和应缴纳的费用(便道上不收费).栈以顺序结构实现,队列以链表结构实现

测试数据

设 n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0).其中’A’ 表示到达(Arrival),’D’表示离开(Departure),’E’表示结束(End)

时间为相对分钟数.用C++编的程序,还要有头文件!

代码:

  1. #include<iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. typedef struct SL{
  5. int id[100];
  6. int time[100];
  7. int top;
  8. }SL;
  9. //顺序栈入栈
  10. void Push(SL &S, int x, int y){
  11. S.top++;
  12. S.id[S.top] = x;
  13. S.time[S.top] = y;
  14. }
  15. //进站
  16. void input(int MAX, int id, int time, SL &S, SL &Sb){
  17. //cout << "2";
  18. if(S.top == MAX-1){
  19. Sb.top++;
  20. Sb.id[Sb.top] = id;
  21. cout << "车牌号是" << Sb.id[Sb.top] << "的车在便道的位置是" << Sb.top+1+1 << endl;
  22. }else{
  23. Push(S, id ,time);
  24. cout << "车牌号是" << S.id[S.top] << "的车在停车场的位置是" << S.top+1 << endl;
  25. }
  26. }
  27. //出站
  28. void output(int id, int time, SL &S, int MAX, int Money, SL &Sb){
  29. SL S1;
  30. S1.top = -1;
  31. while(1){
  32. if(id == S.id[S.top]){
  33. cout << "车牌号是" << id << "的车在停车场停留的时间为" << time-S.time[S.top] << "小时,共花费了" << (time-S.time[S.top])*Money << "元" << endl;
  34. S.top--;
  35. break;
  36. }else{
  37. S1.top++;
  38. S1.id[S1.top] = S.id[S.top];
  39. S1.time[S1.top] = S.time[S.top];
  40. S.top--;
  41. }
  42. }
  43. }
  44. int main(){
  45. SL S,Sb;
  46. S.top = -1;//停车场
  47. Sb.top = -1;//便道
  48. int MAX,Money;
  49. cout << "请输入停车场最大容量(辆)以及车在停车场每小时的费用(元):" << endl;
  50. cin >> MAX >> Money;
  51. char n;
  52. int id,time;
  53. cout << "请输入车的状态(A进站/D出站),车牌号以及时间(进站时间/出站时间):" << endl;
  54. while(1){
  55. cin >> n >> id >> time;
  56. switch(n){
  57. case 'a':
  58. case 'A':
  59. //cout << "1";
  60. input(MAX,id,time,S,Sb);
  61. break;
  62. case 'd':
  63. case 'D':
  64. output(id,time,S,MAX,Money,Sb);
  65. break;
  66. case 'e':
  67. case 'E':
  68. exit(0);
  69. default:
  70. cout << "状态信息输入有误!!!" << endl;
  71. }
  72. }
  73. return 0;
  74. }

效果图:

d836838f5dee4ec198399c117507bcdd.png

发表评论

表情:
评论列表 (有 0 条评论,59人围观)

还没有评论,来说两句吧...

相关阅读

    相关 理解

    一.栈 1.1 概念 栈 :一种 特殊的线性表 ,其 只允许在固定的一端进行插入和删除元素操作 。 进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。 栈中的数据元

    相关 应用停车问题

    题目: > 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车

    相关 堆、区别

    1、堆和栈 1)堆(完全二叉树,可以看成一棵树的数组对象)是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出); 2)堆是在程序运行时,而不是在程序编译时

    相关 区别

    1.队列先进先出,栈先进后出。 对插入和删除操作的"限定"。 栈是限定只能在表的一端进行插入和删除操作的线性表。 队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性

    相关 实际应用

    1.将一个非负的十进制整数N转换成其他D进制数。 解决思路,连续取模%和整除/。D进制各数位的产生顺序是从低位到高位,而输出顺序却是从高位到低位,刚好相反,可以考虑使用栈进行