//首先吐槽一下牛客对我这种新手小白也太不又好了吧,栈的函数一个都不给注明一下,只能去猜了 //这题如果对栈和队列他们各自的特性十分熟悉的话还是很简单的,复习一下,栈的最重要特性 //先进后出,队列恰好相反为先进先出,那一起来看下怎么才能用两个栈实现队列呢? //这里大致讲解一下思路,同学们可以拿出一根笔和纸顺着我的步骤一起画一下 //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; };