剑指offer-----5、用两个栈来实现一个队列
1、题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
2、分析
熟悉队列和栈的数据结构的特点,最大的不同就是队列是先入先出,而栈是先入后出。现在假设我们先用栈1push进去1,2,3三个元素,然后需要pop,那么pop的应该是1这个元素,那么我们将栈1的元素全部pop再push进第二个栈,这样第二个栈的元素入栈的顺序就是3,2,1,这样再pop就可以得到1。如果这个时候再往队列push元素,则将它push到第一个栈。可以看到,队列在做每一次push时其实都是往栈1push,而做pop时需要判断栈2是否为空,如果为空,则将栈1的元素全部弹出在push进栈2,如果不为空,直接pop即可。需要注意的是,stack的pop并不返回元素,需要使用中间变量。
3、代码
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
}
int temp=stack2.top();
stack2.pop();
return temp;
}
private:
stack<int> stack1;
stack<int> stack2;
};
4、相关知识点
栈和队列相关知识。

浙公网安备 33010602011771号