【算法专题--栈】用队列实现栈 -- 高频面试题(图文详解,小白一看就懂!!)

news2025/1/19 17:06:38

目录

一、前言

二、题目描述

三、解题方法

⭐两个队列实现栈

🥝解题思路

🍍案例图解

⭐用一个队列实现栈 

🍇解题思路

🍍案例图解

四、总结与提炼

五、共勉    


一、前言

        用队列实现栈 这道题,可以说是--栈专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会从多个方面考察这道题目,所以大家需要对这道题目非常熟悉哦!!
       本片博客就来详细的讲讲解一下 用队列实现栈 的实现方法,让我们的面试变的更加顺利!!!

二、题目描述

题目链接: 225. 用队列实现栈 - 力扣(LeetCode)

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。

 三、解题方法

首先,需要了解一下,栈 和 队列基本概念  

⭐两个队列实现栈

🥝解题思路

两个队列 que1 que2 实现 的功能que2 其实完全就是一个备份的作用,把 que1除最后一个元素外的其它元素全部备份到 que2 中,然后弹出最后面的元素,再把其他元素从que2 导回 que1。

干涩的语言可能让大家不太好理解,我们在来看一下 详细的图解

🍍案例图解

 模拟的队列执行语句如下:

queue.push(1);        
queue.push(2);        
queue.pop();   // 注意弹出的操作       
queue.push(3);        
queue.push(4);       
queue.pop();  // 注意弹出的操作    
queue.pop();    
queue.pop();    
queue.empty();    
  • 首先,向 que1 中  入队列元素 【1】【2】 ,模拟元素入栈

  • 将 que1 中除队尾元素外 的其它元素,转移到 que2,在移除 que1 中的元素【2】 

  •  移除 que1 中的元素【2】 ,将 que1 赋值给 que2 ,模拟 移除 栈顶元素

  •  继续 向 que1 中入队列元素 【3】【4】,模拟入栈

  • 模拟 栈 的 pop 删掉元素 【4】【3】【1】,和之前的步骤一样,将【4】之前的元素,转移到 que2 中

  •  删除元素【4】,再将 que2 赋值给 que1 ,清空 que2

  • 按照 同样的思路 删除 【3】【1】 

 代码:

class MyStack {
public:
    MyStack() 
    {
        // 程序自己创建构造函数进行初始化
    }
    
    void push(int x)  // 入队列 
    {
        que1.push(x);
    }
    
    int pop()  // 出队列 
    {
        int size = que1.size();
        size--;
        while(size--)   // 将 que1 导入 que2 ,但是要留下最后一个元素
        {
            que2.push(que1.front());
            que1.pop();
        }

        int result = que1.front();  // 留下的最后一个元素就是要返回的元素
        que1.pop();
        que1 = que2;        // 在将 que2 赋值给 que1
        // 清空 que2
        while(!que2.empty())
        {
            que2.pop();
        }
        return result;
    }
    
    int top() // 取 队顶 
    {
        return que1.back();
    }
    
    bool empty() // 判断队列是否为空 
    {
        return que1.empty();
    }
private:
    queue<int> que1;
    queue<int> que2;
};

⭐用一个队列实现栈 

🍇解题思路

其实这道题目就是用一个队列就够了。 

一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时在去弹出元素就是栈的顺序了。 

🍍案例图解

queue.push(1);        
queue.push(2);        
queue.pop();   // 注意弹出的操作 
queue.pop();

 模拟的队列执行语句如上:

  •  向  队列 中插入 元素【1】【2】,模拟入栈

  • 删除元素【2】,将元素【1】出队列,然后再重新入队列 

  •  将元素【2】出队列即可 ,模拟栈 删除元素【2】

  • 删除 元素【1】同理 


代码: 

class MyStack {
public:
    MyStack() 
    {
        // 程序自己创建构造函数进行初始化
    }
    
    void push(int x)  // 入队列 
    {
        que.push(x);
    }
    
    int pop()  // 出队列 
    {
        int size = que.size();
        size--;                 // 保留最后一个元素
        while(size--)
        {
            que.push(que.front());
            que.pop();
        }
        int result = que.front();
        que.pop();
        return result;
    }
    
    int top() // 取 队顶 
    {
        return que.back();
    }
    
    bool empty() // 判断队列是否为空 
    {
        return que.empty();
    }
private:
    queue<int> que;
};


四、总结与提炼

        最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关 用队列实现栈 的题目,这道题目是校招笔试面试中有关栈章节非常高频的一道题目大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握 !! 

五、共勉    

以下就是我对 用队列实现栈 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 栈专题 的理解,请持续关注我哦!!!  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1880967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springcloud第4季 分布式事务seata实现AT模式案例2【经典案例】

一 seata案例 1.1 背景说明 本案例使用seata的at模式&#xff0c;模拟分布式事务场景&#xff1a;【下订单&#xff0c;减库存&#xff0c;扣余额&#xff0c;改状态】 AT模式原理&#xff1a;是2pc方案的演变&#xff0c; 一阶段&#xff1a;业务数据和回滚日志记录在同一…

【MotionCap】conda 链接缺失的cuda库

conda 安装的环境不知道为啥python 环境里的 一些cuda库是空的要自己链接过去。ln 前面是已有的,后面是要新创建的 ln -s <path to the file/folder to be linked> cuda 有安装 libcublas 已经在cuda中 (base) zhangbin@ubuntu-server:~/miniconda3/envs/ai-mocap/lib/…

转让无区域商业管理公司基本流程和要求

无区域公司转让的条件和要求取决于您的业务需求和目标。我们的专业团队将与您合作&#xff0c;深入了解您的公司背景、行业情况和发展计划&#xff0c;为您量身定制适合您的转让方案。无论是公司规模、经营期限、资产状况还是法律形式&#xff0c;我们都将综合考虑确保达到您的…

学习C语言第一步:300行代码实现输出“Hello World“

学习所有语言的第一步几乎都是在控制台输出"Hello World",C语言也是如此&#xff0c;C语言支持结构化编程、词汇范围和递归等特性&#xff0c;C语言编写的代码在稍作修改或无需修改的情况下可以在多种不同的操作系统和平台上编译和运行&#xff0c;同时运行速度极快。…

如何为数据库中的位图添加动态水印

许多数据库存储了以blob或文件形式保存的位图&#xff0c;其中包括照片、文档扫描、医学图像等。当这些位图被各种数据库客户端和应用程序检索时&#xff0c;为了日后的识别和追踪&#xff0c;有时需要在检索时为它们添加唯一的水印。在某些情况下&#xff0c;人们甚至希望这些…

【数组】- 螺旋矩阵 II

1. 对应力扣题目连接 螺旋矩阵 II 题目简述&#xff1a; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。如图&#xff1a; 2. 实现案例代码 public class SpiralMatrix {public static…

网页搜索如何优化效果最好?

可以使用长尾关键词策略&#xff0c;长尾关键词策略是指在SEO优化中&#xff0c;除了使用常规的短关键词外&#xff0c;还深入挖掘和使用那些更长、更具体的关键词。虽然这些关键词的搜索量较低&#xff0c;但竞争也较少&#xff0c;且更具针对性&#xff0c;因此往往能带来更高…

我的世界服务器-高版本服务器-MC服务器-生存服务器-RPG服务器-幻世星辰

生存为主&#xff0c;RPG乐趣为辅&#xff0c;重视每位玩家的建议&#xff0c;一起打造心目中的服务器&#xff0c;与小伙伴一起探险我的世界&#xff01; 服务器版本: 1.18.2 ~ 1.20.4 Q群&#xff1a; 338238381 服务器官网: 星辰毛毛雨-Minecraft高版本生存服务器我的世界…

PMBOK® 第六版 结束项目或阶段

目录 读后感—PMBOK第六版 目录 不论是阶段的收尾还是项目整体的收尾&#xff0c;都应是令人振奋的事。然而&#xff0c;在实际生活中&#xff0c;收尾工作却相当艰难。会遭遇负责人调离、换任&#xff0c;导致不再需要已购产品&#xff1b;项目收尾时对照招标文件或合同&…

[AIGC] 深入了解标准与异常重定向输出

在操作系统和编程环境下&#xff0c;有时我们需要更加精细地控制程序的输入或输出过程&#xff0c;这就涉及到了标准输入输出流&#xff0c;以及重定向的概念。接下来&#xff0c;我们将详细介绍标准输出、标准错误输出&#xff0c;以及如何进行输出重定向。 文章目录 1. 标准输…

企业im(即时通讯)作为安全专属的移动数字化平台的重要工具

企业IM即时通讯作为安全专属的移动数字化平台的重要工具&#xff0c;正在越来越多的企业中发挥着重要的作用。随着移动技术和数字化转型的发展&#xff0c;企业对于安全、高效的内部沟通和协作工具的需求也越来越迫切。本文将探讨企业IM即时通讯作为安全专属的移动数字化平台的…

坏越的小世界的一些修改调整

留言区感觉不够高大上&#xff0c;功能也比较简单。我想了想还是仿照小红书设计一个。 先写个静态 这边想了想是将留言和评论各放一个表和首次加载的放在一个表好。想了想还是选择了后者 不过在sql上这样可能会很麻烦&#xff0c;还是建议分表&#xff0c;看下布局 每次展开会…

QT加载安装外围依赖库的翻译文件后翻译失败的现象分析:依赖库以饿汉式的形式暴露单例接口导致该现象的产生

1、前提说明 VS2019 QtClassLibaryDll是动态库,QtWidgetsApplication4是应用程序。 首先明确:动态库以饿汉式的形式进行单例接口暴露; 然后,应用程序加载动态库的翻译文件并进行全局安装; // ...QTranslator* trans = new QTranslator();//qDebug() << trans->…

支付宝支付之收款码支付

文章目录 收款码支付接入流程安全设计系统交互流程交易状态统一收单交易支付接口请求参数测试结果查询支付撤销支付退款支付退款结果退款说明 收款码支付 继&#xff1a;支付宝支付之入门支付 接入流程 安全设计 支付宝为了保证交易安全采取了一系列安全手段以保证交易安全。…

路由器的ip地址与网关的区别是什么

在网络世界中&#xff0c;路由器扮演着至关重要的角色&#xff0c;它负责数据的传输和网络的互联。而在路由器的设置中&#xff0c;有两个常见的概念&#xff1a;IP地址和网关。那么&#xff0c;路由器的IP地址与网关的区别是什么&#xff1f;下面与虎观代理小二一起了解一下吧…

德国威步的技术演进之路(上):从软件保护到用户体验提升

德国威步自1989年成立以来一直专注于数字安全技术的研究和发展&#xff0c;在软件保护和数字授权领域树立了行业标杆&#xff0c;并在云端许可管理和物联网安全技术方面不断创新。德国威步的成就彰显了其对安全、创新和可持续发展的坚定追求。 德国威步将“完美保护、完美授权…

维卡币(OneCoin)是投资骗局!中国成维卡币传销重灾区,信徒们醒醒吧!创始人被通缉,生死不明!

维卡币(英文名&#xff1a;OneCoin)是一个隐藏在加密货币外表下的庞氏骗局&#xff0c;因传销诈骗和违法吸金被起诉&#xff0c;受害者遍布全球。它的创始人Ruja Ignatova因欺骗和洗钱被列为通缉嫌疑人&#xff0c;成为全球最大金融诈骗案件之一的逃犯&#xff0c;目前美国政府…

INS-GPS组合导航——卡尔曼滤波

系列文章目录 《SAR笔记-卫星轨道建模》 《SAR笔记-卫星轨迹&#xff08;三维建模&#xff09;》 《常用坐标系》 文章目录 前言 一、经典卡尔曼滤波 二、扩展卡尔曼滤波 三、无迹卡尔曼滤波 总结 前言 SAR成像仪器搭载于运动平台&#xff0c;平台的自定位误差将影响SAR…

Go 语言环境搭建

本篇文章为Go语言环境搭建及下载编译器后配置Git终端方法。 目录 安装GO语言SDK Window环境安装 下载 安装测试 安装编辑器 下载编译器 设置git终端方法 总结 安装GO语言SDK Window环境安装 网站 Go下载 - Go语言中文网 - Golang中文社区 还有 All releases - The…

单晶层状氧化物制作方法技术资料 纳离子技术

网盘 https://pan.baidu.com/s/1hjHsXvTXG74-0fDo5TtXWQ?pwd10jk 单晶型高熵普鲁士蓝正极材料及其制备方法与应用.pdf 厘米级铬氧化物单晶及其制备方法和存储器件.pdf 多孔氧化物单晶材料及其制备方法和应用.pdf 大单晶层状氧化物正极材料及其制备方法和应用.pdf 富钠P2相层状…