225. 用队列实现栈 --力扣 --JAVA

简介: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

 题目

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppopempty)。

实现 MyStack 类:

    • void push(int x) 将元素 x 压入栈顶。
    • int pop() 移除并返回栈顶元素。
    • int top() 返回栈顶元素。
    • boolean empty() 如果栈是空的,返回 true ;否则,返回 false

    注意:

      • 你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsizeis empty 这些操作。
      • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

      解题思路一

        1. 队列是先进先出而栈是先进后出,所以需要在队列添加数据时对队列进行倒置;

        代码展示

        class MyStack {
            Queue<Integer> queue1 = null;
            Queue<Integer> queue2 = null;
            public MyStack() {
                queue1 = new LinkedList<>();
                queue2 = new LinkedList<>();
            }
            public void push(int x) {
                queue2.offer(x);
                while (!queue1.isEmpty()){
                    queue2.offer(queue1.poll());
                }
                queue1 = queue2;
                queue2 = new LinkedList<>();
            }
            public int pop() {
                return queue1.poll();
            }
            public int top() {
                return queue1.peek();
            }
            public boolean empty() {
                return queue1.isEmpty();
            }
        }

        image.gif

        解题思路二

          1. 利用ArrayDeque双向队列,可以利用自带的读取和删除末尾的值的方法实现队列的先进后出。

          代码展示

          class MyStack {
              ArrayDeque<Integer> queue = null;
              public MyStack() {
                  queue = new ArrayDeque<>();
              }
              public void push(int x) {
                  queue.addLast(x);
              }
              public int pop() {
                  return queue.pollLast();
              }
              public int top() {
                  return queue.peekLast();
              }
              public boolean empty() {
                  return queue.isEmpty();
              }
          }

          image.gif


          目录
          相关文章
          |
          10天前
          |
          前端开发 Java
          java实现队列数据结构代码详解
          本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
          |
          2月前
          |
          存储 IDE Java
          java设置栈内存大小
          在Java应用中合理设置栈内存大小是确保程序稳定性和性能的重要措施。通过JVM参数 `-Xss`,可以灵活调整栈内存大小,以适应不同的应用场景。本文介绍了设置栈内存大小的方法、应用场景和注意事项,希望能帮助开发者更好地管理Java应用的内存资源。
          98 4
          |
          3月前
          |
          存储 监控 Java
          JAVA线程池有哪些队列? 以及它们的适用场景案例
          不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
          180 12
          |
          4月前
          |
          存储 算法 Java
          Java 内存管理与优化:掌控堆与栈,雕琢高效代码
          Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
          134 5
          |
          5月前
          |
          存储 算法 Java
          🧠Java零基础 - Java栈(Stack)详解
          【10月更文挑战第17天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
          193 2
          |
          6月前
          |
          存储 安全 Java
          【用Java学习数据结构系列】探索栈和队列的无尽秘密
          【用Java学习数据结构系列】探索栈和队列的无尽秘密
          58 2
          |
          6月前
          【LeetCode 24】225.用队列实现栈
          【LeetCode 24】225.用队列实现栈
          38 0
          |
          6月前
          |
          存储 算法 Java
          【用Java学习数据结构系列】用堆实现优先级队列
          【用Java学习数据结构系列】用堆实现优先级队列
          94 0
          |
          算法 Java
          栈和队列【数据结构与算法Java】
          栈和队列【数据结构与算法Java】
          62 0
          |
          算法 Java
          用栈实现队列(java数据结构与算法)
          用栈实现队列(java数据结构与算法)
          183 0
          AI助理

          你好,我是AI助理

          可以解答问题、推荐解决方案等