码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 用两个栈实现队列


    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

  • 相关阅读:
    【es5】标准库
    使用VCPKG编译并使用Qt5
    RPG游戏-小地图系统(二)
    【在SpringBoot项目中使用Validation框架检查数据格式-常用的检查注解】
    百度之星(夏日漫步)
    【pytorch记录】pytorch的分布式 torch.distributed.launch 命令在做什么呢
    python二十行代码教你批量采集超高清 jpg
    【原创毕设程序】基于SSM的心理健康预约测试系统(SSM毕业设计程序)
    基于Java毕业设计蛋糕店会员系统的设计与实现源码+系统+mysql+lw文档+部署软件
    【51单片机系列】C51基础
  • 原文地址:https://blog.csdn.net/apple_67445472/article/details/138221341
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号