《剑指offer》---用两个栈实现队列(c++实现)

题目

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

解析

栈的特性是先进后出,队列的特性是先进先出,要想办法将两个栈组合成一个队列,假如第一个栈将1.2.3.4.5依次按顺序入栈,那么出栈的顺序肯定是5.4.3.2.1,这是我们将第一个栈出栈顺序的元素再依次放入第二个栈里也就是以5.4.3.2.1的方式入栈,那么从第二个栈里出来的顺序就是1.2.3.4.5.经过这么一顿操作就显而易见得到队列先进先出的方式了。再加上一些附加条件即可实现,如下图所示
在这里插入图片描述

代码

class Solution
{
public:
    void push(int node)//入栈方法
     {
        stack1.push(node);
        
    }

    int pop() {               //出栈操作并返回栈顶元素
        int res;              //定义头结点
        if(!stack2.empty())   //如果栈2不为空,就出栈操作
        {
            res=stack2.top();
            stack2.pop();
        }else 					//栈2为空的话,如果此时栈1不为空,就把栈1里的元素都出栈再按顺序压入栈2中,再由栈二进行出栈操作
        {
            while(stack1.size()>0)
            {
                stack2.push(stack1.top());
                stack1.pop();
            }
            res=stack2.top();
            stack2.pop();
        }
        return res;				//返回栈顶元素
        
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值