题目
用两个栈来实现一个队列,完成队列的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;
};