用两个栈实现一个队列
一、算法思想
- 栈的特点是进出在同一头,满足后进先出的顺序
- 队列的特点是进出在两头,满足先进先出的顺序
stack1用于存放入队的元素,以压栈的方式压入stack1,但是这样取出的顺序是反的,所以将stack2当作中转站,这样顺序就变成先进先出了。
二、算法步骤
- 入队:先判断stack1是否已满。如果已满,则以出栈顺序全部压入stack2。然后再入队。如果不满,则直接入队即可。
- 出队:先判断stack2是否为空。如果为空,先将stack1中内容全部出栈压入stack2,然后再出队。如果不为空,则直接出队即可。
三、算法实现
3.1 C++写法
class Solution
{
public:
void push(int node) {
//判满步骤省略,stack容器是动态的
stack1.push(node);
}
int pop() {
if(stack2.empty()){//stack2为空
if(stack1.empty()){//stack1也为空
return 0;
}
else{//stack1中有元素
while(!stack1.empty()){
int temp=stack1.top();
stack1.pop();
stack2.push(temp);
}
}
}
int top=stack2.top();
stack2.pop();
return top;
}
private:
stack<int> stack1;
stack<int> stack2;
};
C++ STL的stack的使用参见我的另外一篇博客:C++ STL容器——stack用法介绍