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

用两个栈实现队列

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;
};
全部评论

相关推荐

07-24 19:01
门头沟学院 Java
后天笔试,又要开始做题了
Sairus:明天10:00笔试
投递京东等公司10个岗位
点赞 评论 收藏
分享
苍蓝星上艾露:这简历。。。可以试试我写的开源简历优化工具https://github.com/weicanie/prisma-ai
点赞 评论 收藏
分享
白火同学:先说结论,准大三不是特别好找实习,boss沟通300+没有实习是很正常的情况。一是暑期实习时间太短了,二是在这么多准大四都找不到实习,从实习时间和掌握技术层面,企业会优先看他们。 再说简历,其实985本+准大三到这水平的简历也很优秀了,要说的话,项目经历可以再优化一下,可以基本围绕采取STAR原则,分为项目概述、技术架构、技术亮点、实现结果,再发给AI润色一下。 最后说操作,准大三的话,如果想找实习那就多投,不过现在也7月中旬了,时间上已经略晚了。如果7月底实在找不到,也可以多刷点算法,多学点技术,这实习也不至于一定得有,当然有更好。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务