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

目录

一、前言

二、题目描述

三、解题方法

⭐两个队列实现栈

🥝解题思路

🍍案例图解

⭐用一个队列实现栈 

🍇解题思路

🍍案例图解

四、总结与提炼

五、共勉    


一、前言

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

二、题目描述

题目链接: 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// 清空 que2while(!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.mzph.cn/pingmian/38223.shtml

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

相关文章

WAF 相关的术语解释

QPS 每秒查询率&#xff08;Query Per Second QPS&#xff09; 是对一个特定的查询服务器&#xff0c;在规定时间内所处理流量多少的衡量标准&#xff0c;在因特网上&#xff0c;作为域名系统服务器的机器性能经常用每秒查询率来衡量&#xff0c;对应 fetches/sec&#xff08;…

论文写作笔记9 word论文排版常见问题

1.公式编写 word公式编写麻烦, 我推荐latex编写转word或识图. 识图可以使用软件Mathpix Snipping Tool, latex转word见下方链接. word中输入的Latex代码&#xff0c;按 Alt 将所选字母变成公式&#xff0c; 然后按 Ctrl 将 Latex 代码转换成 Word 公式 MAML在线互转 …

002-基于Sklearn的机器学习入门:回归分析(上)

本节及后续章节将介绍机器学习中的几种经典回归算法&#xff0c;所选方法都在Sklearn库中聚类模块有具体实现。本节为上篇&#xff0c;将介绍基础的线性回归方法&#xff0c;包括线性回归、逻辑回归、多项式回归和岭回归等。 2.1 回归分析概述 回归&#xff08;Regression&…

【深度学习】Speech2Action: Cross-modal Supervision for Action Recognition

文章目录 Speech2Action: 基于跨模态监督的动作识别摘要1. 引言2. 相关工作将剧本与电影对齐动作识别的监督 3. Speech2Action模型3.1 IMSDb 数据集剧本解析动词挖掘舞台指令基于BERT的语音分类器实现细节结果 4. 动作识别视频挖掘4.1 未标注的数据4.2 获取弱标签4.2.1 使用Spe…

《昇思25天学习打卡营第14天 | 昇思MindSpore基于MindNLP+MusicGen生成自己的个性化音乐》

14天 本节学了基于MindNLPMusicGen生成自己的个性化音乐。 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量的音乐样本。 MusicGen模型基于Transformer结构&#xff0c;可以分解为三个不同的阶段…

springboot笔记示例六:fastjson2集成

springboot笔记示例六&#xff1a;fastjson2集成 本文md下载 https://download.csdn.net/download/a254939392/89491102本文md文档下载地址 #springboot json官方说明 https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-json.htmlsprin…

HP UX服务器监控指标解读(Snmp)

随着企业信息化建设的不断深入&#xff0c;服务器的稳定运行成为了保障业务连续性的关键。HP UX作为一款高性能的Unix服务器操作系统&#xff0c;在各类企业级应用中发挥着重要作用。为了确保HP UX服务器的稳定运行&#xff0c;对其进行全面而细致的监控至关重要。本文将针对监…

⭐ UI自动化工具轻松实现微信消息提醒 ⚡

&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f; 演示效果 &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f; &#x1f605;&#x1f605;&#x1f605;&#x1f605;&#x1f605;&#x1f605; Python安装…

2023HW部分笔试题

题目来源&#xff1a;卡码网 136. 字符串处理器 问题描述 时间限制&#xff1a;1.000S 空间限制&#xff1a;256MB 题目描述 产品代码需要设计一个带游标的字符串处理器&#xff0c;它需要实现以下功能: 插入&#xff1a;在游标所在处添加文本&#xff0c;其对应操作为 i…

AI时代,你的工作会被AI替代吗?

AI在不同领域的应用和发展速度是不同的。在智商方面&#xff0c;尤其是在逻辑推理、数据分析和模式识别等领域&#xff0c;AI已经取得了显著的进展。例如&#xff0c;在国际象棋、围棋等策略游戏中&#xff0c;AI已经能够击败顶尖的人类选手。在科学研究、医学诊断、股市分析等…

一分钟彻底掌握Java枚举

在Java编程语言中&#xff0c;枚举&#xff08;Enum&#xff09;是一种特殊的类&#xff0c;它包含了一组固定的常量。枚举常用于表示固定数量的常量值&#xff0c;例如一周的七天、四个基本方向&#xff08;东、南、西、北&#xff09;等。 0.浅显理解 枚举就像是一个特殊的…

STM32 SWD烧写

最小电路 stm32f103x 内部已经集成了振荡电路&#xff0c;可以省略&#xff1b;rst引脚电路&#xff0c;可以省略&#xff0c;boot0,boot1不需要设置 正常烧录 -------------------------------------------------------------------STM32CubeProgrammer v2.9.0 …

使用 go-control-plane 自定义服务网格控制面

写在前面 阅读本文需要最起码了解envoy相关的概念 本文只是一个类似于demo的测试&#xff0c;只为了学习istio&#xff0c;更好的理解istio中的控制面和数据面&#xff08;pilot -> proxy&#xff09;是如何交互的&#xff0c;下图的蓝色虚线 先说go-control-plane是什么…

nginx 1024 worker_connections are not enough while connecting to upstream

现象 请求api响应慢&#xff0c;甚至出现504 gateway timeout&#xff0c;重启后端服务不能恢复&#xff0c;但重启nginx可以恢复。 解决方案 worker_connections使用了默认值 1024&#xff0c;当流量增长时&#xff0c;导致连接不够 在nginx.conf中修改连接数就可以了&…

小白学python(第四天)顺序与分支篇

这几天因为个人原因&#xff0c;python篇会更新比较慢&#xff0c;还望大家谅解&#xff0c;那么废话不多说&#xff0c;我们现在就进入正题 顺序篇 这个没啥好说的&#xff0c;就是自上而下&#xff0c;依次执行 分支篇 条件&#xff08;if&#xff09;语句语法格式&#…

【车载开发系列】瑞萨RH850单片机入门

【车载开发系列】瑞萨RH850单片机入门 【车载开发系列】瑞萨RH850单片机入门 【车载开发系列】瑞萨RH850单片机入门一. 瑞萨RH850概念二. 瑞萨RH850分类三. 瑞萨RH850的应用领域四. RH850和ARM的区别五. RH850内存概念1. Flash存储器2. RAM&#xff08;随机访问存储器&#xff…

【C++】————string基础用法及部分函数底层实现

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年6月30日 前言&#xff1a; 本文主要介绍STL容器之一 ---- string&#xff0c;在学习C的过程中&#xff0c;我们要将C视为一个语言联邦&#xff08;摘录于Effective C 条款一&#x…

实验6 形态学图像处理

1. 实验目的 ①掌握数字图像处理中&#xff0c;形态学方法的基本思想&#xff1b; ②掌握膨胀、腐蚀、开运算、闭运算等形态学基本运算方法&#xff1b; ③能够利用形态学基本运算方法&#xff0c;编程实现图像去噪&#xff0c;边界提取等功能。 2. 实验内容 ①调用Matlab /…

C语言 统计字符类型个数

这个程序读取用户输入的一行字符&#xff0c;并统计其中的英文字母、空格、数字和其他字符的个数。 #include <stdio.h> #include <ctype.h>int main() {char ch;int letters 0, spaces 0, digits 0, others 0;printf("输入一行字符: ");// 逐字符读…

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

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