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

目录

一、前言

二、题目描述 

三、解题方法

⭐双栈 模拟 队列

🥝栈 和 队列 的特性 

🍍具体思路

🍍案例图解

四、总结与提炼 

五、共勉   


一、前言

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

二、题目描述 

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

请你仅使用两个栈实现先入先出队列队列应当支持一般队列支持的所有操作pushpoppeekempty): 

三、解题方法

⭐双栈 模拟 队列

🥝栈 和 队列 的特性 


队列的特性是 FIFO(先入先出),而栈的特性是 FILO(先入后出)。

知道两者特性之后,我们需要用两个栈来模拟队列的特性,一个栈为入队栈,一个栈为出对栈。


🍍具体思路


我们使用两个栈,其中栈 stk1用于入队,另一个栈 stk2 用于出队。 

  • 入队时,直接将元素入栈 stk1时间复杂度 O(1)。 
  • 出队时,先判断栈 stk2 是否为空,如果为空,则将栈 stk1 中的元素全部出栈并入栈 stk2,然后再从栈 stk2 中出栈一个元素。如果栈 stk2 不为空,则直接从栈 stk2 中出栈一个元素。时间复杂度 O(1)
  • 获取队首元素时,先判断栈 stk2 是否为空,如果为空,则将栈 stk1 中的元素全部出栈并入栈 stk2,然后再从栈 stk2 中获取栈顶元素。如果栈 stk2 不为空,则直接从栈 stk2 中获取栈顶元素。时间复杂度 O(1)
  • 判断队列是否为空时,只要判断两个栈是否都为空即可。时间复杂度 O(1)。 

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


🍍案例图解

执行语句:
queue.push(1);
queue.push(2);
queue.pop(); 注意此时的输出栈的操作
queue.push(3);
queue.push(4);
queue.pop();
queue.pop();注意此时的输出栈的操作
queue.pop();
queue.empty();

 我们,根据这些语句,进行 入队 和 出队 的操作

  • 首先 需要 入队列 【1】 【2】

  • 出 队列  将【1】 从队列 中 排出去 

  • 继续 入队列元素 【3】 【4】

  •  清空队列中的元素

  •  最后,判断队列是否为 空


 代码:

class MyQueue {
public:
    MyQueue() 
    {
        // 程序自己创建构造函数初始化
    }
    
    void move()  // 移动两个栈 中的 元素
    {
        if(st2.empty())
        {
            while(!st1.empty())
            {
                st2.push(st1.top());
                st1.pop();
            }
        }
    }
    void push(int x) // 入 队列
    {
        // 将全部元素 入st1 
        st1.push(x);
    }
    
    int pop()  // 出 队列
    {
        // 先 移动 元素
        move();
        int ans = st2.top();
        st2.pop();
        return ans;
    }
    
    int peek() 
    {
        move();
        return st2.top();
    }
    
    bool empty() 
    {
        return st1.empty() && st2.empty();
    }
    private:

    //用两个 栈 实现 队列
    stack<int> st1;  // 入队
    stack<int> st2;  // 出队


};

四、总结与提炼 

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

五、共勉   

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析-股票分析和可视化(深证指数)

一、内容简介 股市指数作为衡量股市整体表现的重要工具&#xff0c;不仅反映了市场的即时状态&#xff0c;也提供了经济健康状况的关键信号。在全球经济体系中&#xff0c;股市指数被广泛用于预测经济活动&#xff0c;评估投资环境&#xff0c;以及制定财政和货币政策。在中国…

【入门】5分钟了解卷积神经网络CNN是什么

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、卷积神经网络的结构1.1.卷积与池化的作用2.2.全连接层的作用 二、卷积神经网络的运算2.1.卷积层的运算2.2.池化的运算2.3.全连接层运算 三、pytorch实现一个CNN例子3.1.模型的搭建3.2.CNN完整训练代码 CNN神…

几种热管的构造

1、超薄热管构造形式 在实际应用中&#xff0c;超薄热管通常定义为厚度小于2.0mm的平板热管。超薄热管很薄&#xff0c;可紧贴电子元件表面散热&#xff0c;故被广泛应用于移动和可携带电子设备&#xff0c;如智能手机、笔记本电脑和智能手表。用于笔记本电脑和平板电脑的超薄…

【机器学习】Python中sklearn中数据基础处理与分析过程

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 1. 简介 ​编辑 1.1 什么是Scikit-learn 介绍Scikit-learn 应用领域 1.2 安装Scikit-learn 安装步骤 必要的依赖 2. 数据处理 2.1 创建示例数据 2.2 数据预处理 处理缺失值 特征编码 特征缩放 3. 数据…

设计者思维丨权限轴

应用背景 数据的本质是为了业务服务&#xff0c;从而达到更高效的工作方式&#xff0c;实现数据对业务的赋能和推动作用。 因此在构建报表时&#xff0c;需要开发者有设计思维&#xff0c;能够考虑多种应用场景&#xff0c;帮助业务解决实际应用中的问题。 例如&#xff0c;在实…

昇思MindSpore学习入门-函数式自动微分

函数式自动微分 神经网络的训练主要使用反向传播算法&#xff0c;模型预测值&#xff08;logits&#xff09;与正确标签&#xff08;label&#xff09;送入损失函数&#xff08;loss function&#xff09;获得loss&#xff0c;然后进行反向传播计算&#xff0c;求得梯度&#…

论文解读:【CVPR2024】DUSt3R: Geometric 3D Vision Made Easy

论文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代码&#xff1a;GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一种旨在简化几何3D视觉任务的新框架。作者着重于…

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable&#xff0c;&#xff0c;其下有两个子类&#xff1a;ja…

实验4 图像空间滤波

1. 实验目的 ①掌握图像空间滤波的主要原理与方法&#xff1b; ②掌握图像边缘提取的主要原理和方法&#xff1b; ③了解空间滤波在图像处理和机器学习中的应用。 2. 实验内容 ①调用 Matlab / Python OpenCV中的函数&#xff0c;实现均值滤波、高斯滤波、中值滤波等。 ②调…

java基于ssm+jsp 多用户博客个人网站

1管理员功能模块 管理员登录&#xff0c;管理员通过输入用户名、密码等信息进行系统登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入个人网站可以查看&#xff1b;个人中心、博文类型管理、学生博客管理、学生管理、论坛信息、管理员管理、我的收藏管理、留…

Linux多进程和多线程(一)-进程的概念和创建

进程 进程的概念进程的特点如下进程和程序的区别LINUX进程管理 getpid()getppid() 进程的地址空间虚拟地址和物理地址进程状态管理进程相关命令 ps toppstreekill 进程的创建 并发和并行fork() 父子进程执行不同的任务创建多个进程 进程的退出 exit()和_exit() exit()函数让当…

微短剧市场还能火多久?短剧小程序是否有必要搭建?,现在入场到底晚不晚?

我公司在2019年开始都是做软件开发的&#xff0c;从2022到现在&#xff08;2024&#xff09;特别深有体会&#xff0c;在2022年的时候我公司还是在全部做外包项目&#xff0c;一年大概遇到了10多个咨询短剧领域的软件定制&#xff0c;但是当时我只是以为是一个影视播放的程序&a…

7.优化算法之分治-快排归并

0.分治 分而治之 1.颜色分类 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数…

推动多模态智能模型发展:大型视觉语言模型综合多模态评测基准

随着人工智能技术的飞速发展&#xff0c;大型视觉语言模型&#xff08;LVLMs&#xff09;在多模态应用领域取得了显著进展。然而&#xff0c;现有的多模态评估基准测试在跟踪LVLMs发展方面存在不足。为了填补这一空白&#xff0c;本文介绍了MMT-Bench&#xff0c;这是一个全面的…

Django 模版继承

1&#xff0c;设计母版页 Test/templates/6/base.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 修正了模板标签的全角字符问题 -->{% block title %}<title>这个是母版页</title>{…

leetCode.93. 复原 IP 地址

leetCode.93. 复原 IP 地址 题目思路&#xff1a; 代码 // 前导零的判断方法&#xff1a;如果第一个数是0&#xff0c;且第二个数还有数据&#xff0c;那就是前导0&#xff0c;要排除的 // 注意跟单个 0 区分开 class Solution { public:vector<string> res;vector<…

Opencv+python模板匹配

我们经常玩匹配图像或者找相似&#xff0c;opencv可以很好实现这个简单的小功能。 模板是被查找目标的图像&#xff0c;查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法&#xff0c;其语法如下&#xff1a; result cv2.…

【活动感想】筑梦之旅·AI共创工坊 workshop 会议回顾

目录 &#x1f30a;1. 会议详情 &#x1f30a;2. 会议回顾 &#x1f30d;2.1 主持人开场 &#x1f30d;2.2 元甲-小当家 AI 驱动的创意儿童营养早餐料理机&今天吃什么App &#x1f30d;2.3 Steven- A l 心理疗愈认知 &#x1f30d;2.4 伯棠-诸子百家(xExperts)-多智能…

私有部署Twikoo评论系统

原文&#xff1a;https://blog.c12th.cn/archives/12.html 前言 以前用 MongoDB Vercel 搭建 Twikoo 老是有点小问题&#xff0c;所以就放弃了。无意中看到可以用 docker 来搭建&#xff0c;正好有台服务器可以尝试下。 私有部署 Twikoo 版本要求 1.6.0 或以上 &#xff0c; …

AMD Anti-Lag 2抗延迟技术落地 CS2首发、延迟缩短95%

AMD发布了全新重磅驱动程序Adrenalin 24.6.1版本&#xff0c;包括首发落地Anti-Lag 2抗延迟技术、优化支持新游戏、升级支持HYPR-Tune、支持新操作系统、优化AI加速与开发、扩展支持Agility SDK、修复已知Bug&#xff0c;等等。 一、Anti-Lag 2 今年5月份刚宣布&#xff0c;重…