• 用两个栈实现队列


    img

    😀前言
    在日常编程中,我们经常会遇到需要使用队列的情况,而在某些场景下,我们需要用栈来模拟队列的功能。本文将探讨如何使用两个栈来实现队列,并确保插入与删除操作的时间复杂度都是 O(1),同时保证存储 n 个元素的空间复杂度为 O(n)。通过合理的设计和实现,我们能够达到高效、可靠的队列操作。

    🏠个人主页:尘觉主页

    用两个栈实现队列

    题目链接

    牛客网

    题目描述

    用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
    数据范围: n≤1000
    要求:存储n个元素的空间复杂度为 O(n),插入与删除的时间复杂度都是 O(1)

    输入:[“PSH1”,“PSH2”,“POP”,“POP”]
    返回值:1,2
    说明:
    “PSH1”:代表将1插入队列尾部
    “PSH2”:代表将2插入队列尾部
    "POP“:代表删除一个元素,先进先出=>返回1
    "POP“:代表删除一个元素,先进先出=>返回2

    用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。

    解题思路

    in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序再一次被反转,因此出栈顺序就和最开始入栈顺序是相同的,先进入的元素先退出,这就是队列的顺序。

    3ea280b5-be7d-471b-ac76-ff020384357c

    Stack<Integer> in = new Stack<Integer>();
    Stack<Integer> out = new Stack<Integer>();
    
    public void push(int node) {
        in.push(node);
    }
    
    public int pop() throws Exception {
        if (out.isEmpty())
            while (!in.isEmpty())
                out.push(in.pop());
    
        if (out.isEmpty())
            throw new Exception("queue is empty");
    
        return out.pop();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    😄总结

    通过本文的学习,我们了解了如何利用两个栈来模拟队列的功能。通过设计一个入栈栈和一个出栈栈,我们能够实现队列的先进先出特性。在插入操作时,元素被压入入栈栈;在删除操作时,先将入栈栈的元素依次弹出并压入出栈栈,然后再从出栈栈中弹出元素,实现队列的出队操作。这样的设计保证了插入和删除操作的时间复杂度均为 O(1),并且空间复杂度为 O(n),满足了题目要求。这种利用栈实现队列的方法,在实际编程中具有一定的实用性,能够帮助我们更好地理解数据结构之间的相互转换和实现原理。

    😁热门专栏推荐
    想学习vue的可以看看这个

    java基础合集

    数据库合集

    redis合集

    nginx合集

    linux合集

    手写机制

    微服务组件

    spring_尘觉

    springMVC

    mybits

    等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

    🤔欢迎大家加入我的社区 尘觉社区

    文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
    希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
    如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

    img

  • 相关阅读:
    vue2.0中自适应echarts图表、全屏插件screenfull
    初探802.11协议(5)——MIMO/MU-MIMO/OFDMA概念介绍
    [附源码]SSM计算机毕业设计旅游管理系统JAVA
    开源数据备份工具 Duplicati
    探索Facebook对世界各地文化的影响
    docker 交叉编译镜像
    汉朔科技IPO:引领智慧零售新时代,推动行业数字化转型
    PHP JSON的解析和创建
    给所有的async函数添加try/catch
    线性表-----栈(栈的初始化、建立、入栈、出栈、遍历、清空等操作)
  • 原文地址:https://blog.csdn.net/apple_67445472/article/details/138221341