用两个栈实现队列

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();
}

😄总结

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

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

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

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

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

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

img

相关推荐

  1. 实现队列(c++实现

    2024-04-29 18:58:04       38 阅读
  2. 实现队列

    2024-04-29 18:58:04       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-29 18:58:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-29 18:58:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-29 18:58:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-29 18:58:04       20 阅读

热门阅读

  1. 【Docker】常见命令汇总

    2024-04-29 18:58:04       14 阅读
  2. 力扣56. 合并区间

    2024-04-29 18:58:04       10 阅读
  3. 基于单片机的家居智能系统设计与实现

    2024-04-29 18:58:04       13 阅读
  4. leetcode 144. 二叉树的前序遍历

    2024-04-29 18:58:04       12 阅读
  5. 【python】去除水印的几种方式

    2024-04-29 18:58:04       12 阅读
  6. 苏震巍与 Scott Hanselman 有关 AI 及智能体的访谈

    2024-04-29 18:58:04       11 阅读
  7. AntDesignReact提示key重复解决方案

    2024-04-29 18:58:04       12 阅读
  8. 什么是 CSRF 攻击,如何避免?

    2024-04-29 18:58:04       10 阅读
  9. spring restTemplate的使用和学习总结

    2024-04-29 18:58:04       12 阅读
  10. Spring AOP相关注解与execution 切点表达式概述

    2024-04-29 18:58:04       13 阅读