剑指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() 在队列为空时会抛出异常,确保正确性。
结论
通过以上方法,我们可以使用两个栈来实现一个队列,确保先进先出的操作顺序。这种方法简洁高效,适用于需要用栈结构模拟队列的情况。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2026年06月05日 08时45分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!