用两个栈实现队列

本文介绍了一种使用两个栈(stack1和stack2)实现队列的创新方法,通过巧妙地在两个栈之间转移数据,实现了队列的先入先出特性。当进行入队操作时,所有stack2的元素会先移至stack1,再将新元素压入stack1;出队时,则反向操作,确保了队列操作的正确性。
摘要由CSDN通过智能技术生成

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

思路:

将压入队列的数先压入stack1,再弹到stack2.就可以实现队列的"先入先出"的功能.

但值得注意的是,

1.在队列进行"入队"操作的时候,其实就是把数字压入stack1.但是将数字压入stack1时候要保证stack2是空的,如果不是空的,就得先将stack2中的值先压入stack1,然后再将入队的值压入stack1中.因为如果stack2中有值的话,那说明这些值是比刚入队的值更早入队的,所以要把这些stack2中的值先压入stack1,再把刚入队的值压入stack1.

2.在队列进行"出队"的操作时,其实就是将stack2中的数字弹出,但是在弹出时需要保证stack1是空的.因为如果stack1中有值的话,那说明stack1中的值是更早入队的,按照队列先进先出的性质,需要将stack1中的值先弹出.所以需要把stack1中的值都先弹出到stack2中.然后stack2执行弹出栈顶的操作,也就是"出队"的操作.

class Solution
{
public:
    void push(int node) {
        while(!stack2.empty())
        {
            int p = stack2.top();
            stack2.pop();
            stack1.push(p);
        }
        
        stack1.push(node);
    }

    int pop() {
        while(!stack1.empty()){
            int q = stack1.top();
            stack1.pop();
            stack2.push(q);
            
        }
        
        int re = stack2.top();
        stack2.pop();
        return re ;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值