两个栈实现一个队列

本文介绍了一种使用两个栈来实现队列的方法。通过将一个栈(A)用于入队操作,另一个栈(B)用于出队操作,可以有效地模拟队列的先进先出特性。当需要出队时,如果栈B为空,就将栈A的所有元素依次弹出并压入栈B,从而反转元素顺序,确保出队时遵循先进先出原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用两个栈实现一个队列。

由于栈的特性是后进先出,而队列的特性是先进先出。
当A栈从栈底到栈顶依次有元素1,2,3。而要模拟队列时,出队列必需是1,2,3。此时,则可以将栈A中的元素依次弹出,进入栈B,则形成3,2,1的顺序,再从栈B弹出时就是1,2,3的顺序了。
有了这个思想就可以写出如下代码:

// 用于进队列
Deque<Integer> first = new ArrayDeque<Integer>();
// 用于出队列,出队的元素必需从此栈弹出。如果为空时将first栈中的元素入栈。
Deque<Integer> second = new ArrayDeque<Integer>();
public CQueue() {

}

// 元素进队列
public void appendTail(int value) {
    first.push(value);
}

// 元素出队列
public int deleteHead() {
    // 出队列时如果s2是空,就需要把s1的数据导过来。
    if (second.isEmpty()) {
        while (!first.isEmpty()) {
            second.push(first.pop());
        }
    }  
    
    // 出队的元素必需经过second栈
    return second.isEmpty() ? -1 : second.pop();
}

此题主要是理解栈的后进先出及队列的先进先出特点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值