用两个栈实现队列

本文探讨使用两个栈实现队列的Push和Pop操作,详细解析了如何通过一个栈进行元素入队,另一个栈用于出队,确保队列出队遵循先进先出原则。文章提供了具体的实现代码,展示了当栈2为空时,如何将栈1的元素依次转移到栈2,以正确实现队列的出队操作。
摘要由CSDN通过智能技术生成

最近开始看数据结构,也开始刷题,真的太菜了,什么都不会。

题目

用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。

 

分析下题目,也就是说,一个栈用来push,一个栈用来pop。而且顺序是先进先出!

每次push一个元素进栈1,这个比较容易理解。

对于pop,思路大概如下:

  1. 如果栈2中还有元素,那么先把栈2的元素出栈,这一点至关重要。前面没考虑这个问题,导致继续向栈2压入元素,使得出栈是顺序不对。
  2. 如果栈2为空,那么从栈1出栈的元素分别入栈栈2.
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();

public void push(int node) {
     //栈1负责入栈
     stack1.push(node);
}

public int pop() throws Exception {
    //栈2负责出栈
    if(stack2.isEmpty()){
         while (!stack1.isEmpty()){
            stack2.push(stack1.pop());
         }
     }
     if (stack2.isEmpty()){
        throw new Exception("queue is empty");
     }
    return stack2.pop();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值