题解 | #用两个栈实现队列#

用两个栈实现队列

http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6

//首先吐槽一下牛客对我这种新手小白也太不又好了吧,栈的函数一个都不给注明一下,只能去猜了
//这题如果对栈和队列他们各自的特性十分熟悉的话还是很简单的,复习一下,栈的最重要特性
//先进后出,队列恰好相反为先进先出,那一起来看下怎么才能用两个栈实现队列呢?
//这里大致讲解一下思路,同学们可以拿出一根笔和纸顺着我的步骤一起画一下
//1.首先题目给了两个栈,这两个栈都有明确的分工,同学们标记一下。第一个栈(stack1)只用来入栈,stack2只用来出栈。就这么简单
//2.对于入栈没有什么情况可以分析,就是入栈我就入第一个(stack1)里面,对于出栈我们要分两种情况
//2.1 第一种情况,如果栈二(stack2)此时为空栈的话,我们首先要把栈1中的元素逐个出栈(出完)再逐个入栈到栈二中去,然后出栈stack2栈顶元素
//2.2 第二种情况,如果栈二不为空,此时我们要出栈的话,直接出栈stack2的栈顶元素即可
//大家可以自行模拟一下,按照这个操作来绝对实现了队列先进先出的特性,绝对童叟无欺
//no 代码你说个JB,下面看代码。
class Solution
{
public:
    void push(int node) {   //入栈函数,遵照我们前面说的,入栈就一种情况直接入栈stack1中即可
        stack1.push(node);//push函数参数就是函数参数类型
    }

    int pop() {    //出栈分两种情况
        if(stack2.empty())//第一种情况:栈二为空栈(注意empty函数的返回类型为bool类型,即如果是空栈返回true否则返回false)
        {
            while(!stack1.empty())//栈二为空栈就把栈一中的元素全部入栈到栈二中
            {
                int data=stack1.top();
                stack1.pop();
                stack2.push(data);
            }
            int data=stack2.top();
            stack2.pop();
            return data;
        }
        else//第二种情况:栈二不为空,那就直接出栈顶元素即可 
        {
            int data=stack2.top();
            stack2.pop();
            return data;
        }
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务