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

2023-05-16

题目:

        设停车场是一个可停放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++编的程序,还要有头文件!

代码:

#include<iostream>
#include<bits/stdc++.h> 
using namespace std;

typedef struct SL{
	int id[100];
	int time[100];
	int top;
}SL;

//顺序栈入栈 
void Push(SL &S, int x, int y){
	 	S.top++;
	 	S.id[S.top] = x;
	 	S.time[S.top] = y;
}

//进站
void input(int MAX, int id, int time, SL &S, SL &Sb){
    //cout << "2";
    if(S.top == MAX-1){
        Sb.top++;
        Sb.id[Sb.top]  = id; 
        cout << "车牌号是" << Sb.id[Sb.top] << "的车在便道的位置是" << Sb.top+1+1 << endl;
    }else{
        Push(S, id ,time);
        cout << "车牌号是" << S.id[S.top] << "的车在停车场的位置是" << S.top+1 << endl;
    }
}

//出站
void output(int id, int time, SL &S, int MAX, int Money, SL &Sb){
    SL S1;
    S1.top = -1;
    while(1){
        if(id == S.id[S.top]){
            cout << "车牌号是" << id << "的车在停车场停留的时间为" << time-S.time[S.top] << "小时,共花费了" << (time-S.time[S.top])*Money << "元" << endl;
            S.top--;
            break;
        }else{
            S1.top++;
            S1.id[S1.top]   = S.id[S.top];
            S1.time[S1.top] = S.time[S.top]; 
            S.top--;
        }
    }
}

int main(){
    SL S,Sb;
    S.top  = -1;//停车场
    Sb.top = -1;//便道
    
    int MAX,Money;
    cout << "请输入停车场最大容量(辆)以及车在停车场每小时的费用(元):" << endl;
    cin >> MAX >> Money;
    
    char n;
    int id,time;
    
    cout << "请输入车的状态(A进站/D出站),车牌号以及时间(进站时间/出站时间):" << endl;
    while(1){    
        
        cin >> n >> id >> time;
        switch(n){
            case 'a':
            case 'A':
            //cout << "1";
                input(MAX,id,time,S,Sb);
                break;
            case 'd':
            case 'D':
                output(id,time,S,MAX,Money,Sb);
                break;
            case 'e':
            case 'E':
                exit(0);
            default:
                cout << "状态信息输入有误!!!" << endl;
        }
    }
    return 0;
}

效果图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

栈和队列的应用之停车问题 的相关文章

  • 解决ROS中运行launch文件报错ERROR: cannot launch node of type[xxx/xxx]:xxx的问题

    解决ROS中运行launch文件报错ERROR cannot launch node of type xxx xxx xxx的问题 错误截图 xff1a 原因 xff1a 解决方式 xff1a 当时我出现的错误是 ERROR cannot
  • c++ stl 五种迭代器

    c 43 43 stl 五种迭代器 2010 12 31 14 22 25 分类 xff1a C 43 43 C 举报 字号 订阅 下载LOFTER 我的照片书 迭代器的分类 Iterator Categories I
  • C语言头文件中定义变量问题(转)

    上个星期回学校的时候 xff0c 刚好碰到一个学弟在写程序 xff0c 并且刚好碰到一个总编不过去的问题 xff0c 我看了看 xff0c 正好是个头文件重复包含问题 xff0c 问题描述如下 xff1a 他在程序中建立了一个global
  • Opencv Aruco识别(python)

    效果图 先上效果 代码 直接上代码 xff1a span class token operator span span class token operator span usr span class token operator span
  • Windows下Cmake安装步骤详解(图文)

    文章目录 Cmake介绍Cmake下载及安装 Cmake介绍 CMake是一个跨平台的安装 xff08 编译 xff09 工具 xff0c 可以用简单的语句来描述所有平台的安装 编译过程 xff0c 并且输出对应的makefile或者pro
  • C语言:通过指针模拟实现strcat函数

    模拟实现strcat strcat函数的功能 把src所指向的字符串 xff08 包括 0 xff09 复制到dest所指向的字符串后面 xff08 删除dest原来末尾的 0 xff09 要保证dest足够长 xff0c 以容纳被复制进来
  • C语言中将字符串拆分再进行拼接

    我们有时候需要对于字符串进行操作 xff0c 主要用到strcat和strtok两个函数 xff0c 因此记录下这次的操作方式以便之后查阅 span class token macro property span class token d
  • 并行编程实现矩阵乘法优化

    实现四种矩阵乘法程序 xff0c 并对比运行效率 1 xff09 串行算法 2 xff09 Catch优化 3 xff09 SSE版本 4 xff09 分片策略 span class token macro property span cl
  • c++的函数reserve()和unique()和sort()

    函数reserve span class token comment vector reserve span span class token macro property span class token directive keywor
  • 关于c中代码加 ‘\‘ 进行换行的说明

    我们在c与c 43 43 中经常会遇到一种情况就是加 进行换行来保持代码整体结构一致的使用情况 xff0c 那么具体来说换行的规则是什么 xff0c 这里进行一下记录 span class token macro property span
  • git的命令总结

    先把清单列出来git cheat sheet git 命令总结 git的init和git clonegit add和git commit 提交二连git checkout 反向操作git reset 回退HEAD指针git revert 同
  • 宏定义中的可变参数 __VA_ARGS__ 用法 与 #和##的用法

    首先了解一下可变参数 span class token macro property span class token directive keyword include span span class token string lt st
  • C++结构体简单链表原理解释

    对结构体简单链表原理的简单解释 xff0c 程序如下 xff1a struct lianbiao int no string name struct lianbiao next lianbiao head 61 nullptr tail 6
  • linux小连招

    Linux命令目录 查看当前shell的种类find命令查找文件 查看当前shell的种类 查看当前发行版可以使用的shell xff1a chao 64 chao span class token function cat span et
  • 侵略性奶牛(对于二分的总结)

    题目 Farmer John has built a new long barn with N 2 lt 61 N lt 61 100 000 stalls The stalls are located along a straight l
  • To Fill or Not to Fill(贪心算法)

    题目描述 有了高速公路 xff0c 开车从杭州到任何其他城市都很容易 但由于汽车的油箱容量有限 xff0c 我们必须不时地在路上找到加油站 不同的加油站可能会给出不同的价格 你被要求仔细设计最便宜的路线去 输入描述 对于每个测试实例 第一行
  • cmake语法

    目录 基本语法命令行projectadd executabletarget sourcessetfileadd librarymessagetarget link librariestarget include directoriesfin
  • 《C++个人学习笔记》使用cout或cin显示未定义标识符

    在vs自动生成的c 43 43 项目中 xff0c 初次使用cout或cin报未定义标识符错误 xff0c 是由于未声明命名空间的原因 解决方法 xff1a 在头文件中声明全局命名空间 加入 using namespace std 表示使用
  • rosbag error

    rosbag play 报错 error 1 md5sum span class token punctuation span span class token constant ERROR span span class token pu

随机推荐