剑指offer打卡Day21:两个栈实现队列
发布日期:2021-04-30 21:01:18 浏览次数:111 分类:精选文章

本文共 1299 字,大约阅读时间需要 4 分钟。

为了实现一个使用两个栈来模拟队列的数据结构,我们可以通过以下方法实现Push和Pop操作。队列中的元素为int类型。

模拟过程

  • Stack1 和 Stack2 的作用

    • Stack1 用于暂存新入队的元素。
    • Stack2 用于存储需要出队的元素,确保先进先出的顺序。
  • Push操作(入队)

    • 将元素推送到Stack1中。
    • 代码示例:
      public void push(int node) {    stack1.push(node);}
  • Pop操作(出队)

    • 如果Stack2不为空,直接弹出Stack2的栈顶元素。
    • 如果Stack2为空,先将Stack1中的元素全部弹至Stack2,再弹出Stack2的栈顶元素。
    • 代码示例:
      public int pop() {    if (stack2.isEmpty()) {        while (!stack1.isEmpty()) {            stack2.push(stack1.pop());        }    }    return stack2.pop();}
  • 详细步骤说明

  • 入队操作

    • 将元素推送到Stack1中。
    • 例如,入队元素[a, b, c],Stack1内序列变为[a, b, c],Stack2为空。
  • 出队操作

    • 情况一:Stack2不为空。
      • 直接弹出Stack2的栈顶元素。
      • 例如,Stack2中已有元素[c, b, a],弹出元素a。
    • 情况二:Stack2为空。
      • 将Stack1中的所有元素逐个弹出到Stack2中。
      • 例如,Stack1中有[b, c],弹出后Stack2变为[c, b]。
      • 然后弹出Stack2的栈顶元素c。
  • 代码实现

    import java.util.Stack;public class Solution {    Stack
    stack1 = new Stack<>(); Stack
    stack2 = new Stack<>(); public void push(int node) { stack1.push(node); } public int pop() { if (stack2.isEmpty()) { while (!stack1.isEmpty()) { stack2.push(stack1.pop()); } } return stack2.pop(); }}

    测试示例

  • 入队后立即出队

    • push(5)
    • pop() → 返回5
  • 多个元素入队和出队

    • push(1)
    • push(2)
    • push(3)
    • pop() → 1
    • pop() → 2
    • pop() → 3
  • 边界情况测试

    • pop() 在队列为空时会抛出异常,确保正确性。
  • 结论

    通过以上方法,我们可以使用两个栈来实现一个队列,确保先进先出的操作顺序。这种方法简洁高效,适用于需要用栈结构模拟队列的情况。

    上一篇:稀疏数组
    下一篇:Servlet介绍

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2026年06月05日 08时45分21秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章