面试题:用两个队列实现一个栈

article/2025/8/27 16:05:07

在做这道题之前,我们首先要搞清楚队列和栈的特点。

队列:先进先出,即插入数据在队尾进行,删除数据在队头进行;

栈:后进先出,即插入与删除数据均在栈顶进行。

POP:

        如果我们要实现一个栈,我们先进入的数据一定是先出去的,怎么样利用队列实现这个特点呢?我们可以利用两个队列来进行数据顺序的调整。当我们需要删除数据时,我们可以先将数据push到一个队列当中,pop时,因为队列是先进先出的,所以我们可以将队尾的元素保留下来,其余元素按照出队的顺序入队到另外一个队列当中,然后pop第一个队列的最后一个元素,这样就实现了栈的删除操作。

                                            

        上图是栈进行一次删除数据的示意图,当我们需要再次删除数据时,我们需要将queue2的队尾数据保存下来进行pop,其余数据入队到另外一个队列当中。就这样利用两个队列来对数据进行来回交换实现栈。

写代码的时候需要注意当两个队列都为空的时候是没有办法pop数据的。

PUSH:

         当我们要插入数据的时候,我们需要对队列进行判断,将数据插入到非空的队列当中。这样的话pop时我们分情况讨论的时候只用分队列为空和不为空两种情况,有利于代码的编写。若是插入数据时将数据插入到非空队列,那就可能出现第三种情况,两个队列都不为空,这个时候写的代码就比较复杂了。所以选择第一种方式。


#include<iostream>
#include<queue>using namespace std;
template<typename T>
class Satck
{
public:Satck(){}~Satck(){}void Push(const T& data){if (queue1.size()>0)//q1非空{queue1.push( data);}else if (queue2.size() > 0)//q2非空{queue2.push( data);}else//q1,q2都为空{queue1.push( data);}}void Pop(){if (queue1.size() != NULL ){while (queue1.size()!=1){queue2.push(queue1.front());queue1.pop();}queue1.pop();}else{while (queue2.size() != 1){queue1.push(queue2.front());queue2.pop();}queue2.pop();}}T& Top(){if (queue1.size() > 0){return queue1.front();}else{return queue2.front();}}bool Empty(){if (queue1.empty() && queue2.empty()){return true ;}elsereturn false ;}size_t Size(){if (queue1.empty() && queue2.empty()){return 0;}else if (queue1.size() > 0){return queue1.size();}else{return queue2.size();}}
private:queue<T > queue1;queue<T > queue2;
};void funtest()
{Satck<int > stack;stack.Push(1);stack.Push(2);stack.Push(3);stack.Push(4);stack.Push(5);cout << stack.Size() << endl;cout << stack.Empty() << endl;cout << stack.Top() << endl;stack.Pop();cout << stack.Top() << endl;stack.Push(5);stack.Pop();}
int main()
{funtest();return 0;
}



http://chatgpt.dhexx.cn/article/G7Tab7Wp.shtml

相关文章

Prescan(五):prescan与simulink的连接

1. prescan界面 打开matlab&#xff0c;其中matlab需要从prescan manager中打开 在打开前需要确保是否在prescan中设置了正确的matlab路径 2. matlab界面 本例程中以摄像头为传感器&#xff0c;做一个简要的展示&#xff0c;生成如下所示的车辆&#xff0c;就是仿真环境中在pr…

prescan8.5安装教程(详细)

一、简介 PreScan是一个用于先进驾驶辅助系统和主动安全系统开发验证的仿真工具&#xff0c;系统釆用传感器监测车辆的周围环境并使用获得的信息釆取行动&#xff0c;这类行动可以是警告司机回避潜在的危险&#xff0c;也可以使通过自动刹车或自动转向主动回避危险。 PreScan可…

prescan里的TIS传感器

文章目录 About the TISTIS Nomenclature(TIS术语)TIS Dialog Tabs(TIS对话框选项卡)TIS Scan Patterns行扫描Z扫描Z扫描波束 矩阵扫描 TIS Computational Limitations&#xff08;TIS计算限制&#xff09;TIS Accuracy&#xff08;TIS Accuracy&#xff09;Sensor Assignment&…

prescan8.5 百度网盘下载链接及安装过程

prescan8.5 安装教程 含百度网盘下载链接 下载地址&#xff1a; 链接 安装过程: 1、下载软件安装包后双击打开…\PreScan8.5\aTsitePreSc850\TASS.International.PreScan.8.5.0.Win64-SSQ目录下的PreScan-8.5.0-win64.exe 2、在打开的Setup – Prescan安装界面中点击 Next…

Prescan测试场景和工况的建模方法,导入功能

Prescan中的仿真分为以下四大模块 1.场景工况 2.环境感知 3.决策算法 4.执行器 场景工况 对于环境工况&#xff0c;Prescan提供Traffic element Database 其中包括134 Demo Scenarios Euro NCAP *11 NHTSA * 12 ISO * 19 ADAC * 9 DMAPI Data importing openDRIVE Data …

prescan和carsim联合仿真中出现的一些问题以及解决方法

Prescan和carsim都天然能和simulink联合仿真&#xff0c;于是就在simulink中联合起来。 由于比较熟悉prescan的simulink仿真&#xff0c;因此联合过程看作&#xff1a; 在carsim中生成比较精密的车辆动力学模型&#xff0c;并且在prescan中替换掉。 准备工作&#xff0c;下载…

Adaptive Cruise Control (ACC) Test Scenarios(PreScan里面的ACC)

文章目录 Adaptive Cruise Control (ACC) Test Scenarios PreScan scenario models available with the ACC system ACC模型的几个预扫描场景可用&#xff1a; 真实生活场景–系统的典型用例 ISO测试协议 这些模型展示了如何使用PreScan对ADAS系统进行建模&#xff0c;并提供“…

[Prescan]Prescan中Sensor学习

文章目录 1. Idealized Sensor1.1 GPS接收器1.2 AIR Sensor 执行器信息传感器1.3 Beacon/OBU 2. Detailed Sensor2.1 Camera Sensor2.2 Fish eye Camera2.3 Lidar2.4 Radar Sensor2.4 Ultrasonic Sensor 3. Ground Truth Sensor3.1 Lane Marker Sensor3.2 Analytical Lane Mark…

PreScan 学习问题总结

prescan_01 安装 PreScan 选择Matlab 版本时&#xff0c;提示版本不匹配 忽略即可&#xff0c; 安装matlab需要对应的语言编译软件和对应版本&#xff0c; 查询路径如下&#xff1a; https://ww2.mathworks.cn/support/requirements/previous-releases.html prescan 和 mat…

Prescan8.5安装详细教程

Prescan8.5软件安装详细教程 Win10 64位 PreScan是西门子公司旗下汽车驾驶仿真软件产品&#xff0c;Prescan是以物理模型为基础&#xff0c;开发ADAS和智能汽车系统的仿真平台。支持摄像头、雷达、激光雷达、GPS&#xff0c;以及V2V/V2I车车通讯等多种应用功能的开发应用。 Pr…

Prescan入门教程之避坑笔记:初学者初用

建立项目文件 打开prescan软件后界面如下&#xff1a; 点击其工作界面的左上角file&#xff0c;一般来初用需新建自己的项目文件夹即点击new experiment&#xff0c;可以自定义文件位置&#xff0c;也可以使用软件默认位置&#xff1b;当然&#xff0c;如果你已经是老司机&am…

PreScan自带泊车模型

prescan有自带的泊车例子 停车辅助系统的功能目标是帮助驾驶员找到空停车位&#xff0c;并通过全自动应用程序&#xff08;转向和油门/制动器&#xff09;帮助驾驶员驶入停车位。这些系统设计用于提高停车操作期间的安全性和驾驶员舒适度。为本演示设计的算法首先收集有关车…

PreScan第一课:软件简介和基础

为了自己和他人学习的需要&#xff0c;建了一个PreScan的QQ群&#xff1a;613469333&#xff08;已满&#xff09;/ 778225322&#xff08;可加&#xff09;&#xff0c;加群前请私聊群主&#xff08;QQ&#xff1a;2059799865&#xff09;加入。群管理需要花费时间和精力&…

Prescan学习笔记

一、 prescan新建场景&#xff08;Experiment&#xff0c;快捷键CtrlN&#xff09; 可设定保存路径&#xff0c;给仿真预设特定的计算频率&#xff0c;作者名称以及简单的场景模型描述 二、场景建模工作 鼠标滚轮可实现画布的缩放&#xff0c;摁住滚轮可实现平移画布 搭建场…

Prescan-行人识别

前面提到了摄像头实现的PCW-行人碰撞预警&#xff08;Pedestrian Collision Warning&#xff09;功能&#xff0c;在此用Prescan做个简单的示例&#xff0c;步骤如下&#xff1a; 1、场景创建 要求场景至少具有一辆车&#xff0c;一条道路&#xff0c;一个行人&#xff0c;然…

Prescan(二):从0到1使用prescan搭建仿真物理环境模型

1. 一句话概括prescan&#xff1f; PreScan 是以物理模型为基础&#xff0c;支持多种传感器&#xff0c;基于simulink开发的 ADAS 和自动驾驶仿真软件。 2. prescan怎么下载&#xff1f; 可以向官方申请lisence使用试用版&#xff0c;需要公司账号申请&#xff1b;其他渠道&…

Prescan-功能预览

鉴于这两年无人驾驶炒的火热&#xff0c;想学习点基础知识&#xff0c;以免被淘汰。然而囊中羞涩&#xff0c;Jetson TX2、Lidar。。。只可远观&#xff0c;由于本人从事过汽车结构设计及3D设计和仿真软件技术支持&#xff0c;同时会点C/C#/Python&#xff0c;考虑工作贴合度&a…

【暂时完结】Prescan学习笔记

因个人学习暂不会用到Prescan&#xff0c;关于Prescan的学习笔记暂时停止更新&#xff0c;有兴趣的同学可参见下面网址。 以下资料是对B站上学习视频的整理&#xff0c;主要来源&#xff1a;https://space.bilibili.com/268138391/&#xff0c;大家一起学习哦 Prescan学习记录…

PreScan笔记(1)——入坑之简单介绍和Demo

文章目录 PreScan 小白入坑1. PreScan简单介绍2. First Demo简单介绍实验的基本四步具体流程与MATLAB连接过程中的问题 参考 PreScan 小白入坑 本人最近才接触PreScan&#xff0c;最近也略微熟悉了GUI和相关步骤。先给自己定个目标&#xff0c;之后每学一点就写一点。 PreSca…

matlab、carsim、prescan联合仿真从零开始详细步骤

matlab、carsim、prescan联合仿真详细步骤 在matlab、carsim、prescan联合仿真中&#xff0c;prescan提供测试场景和传感器模型&#xff0c;但prescan也提供车辆动力学2D和3D模型&#xff0c;因此在验证自动驾驶算法功能逻辑时&#xff0c;或者对车辆动力学模型要求没有那么高…