剑指offer题目5:用两个栈实现队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解答思路
题目是打算我们用两个先进后出的栈来实现先进先出的队列。push的时候把元素全部放到其中的一个栈(stack1)中。pop出的时候需要用另一个栈逆转一下方向,把全部stack1的元素pop到stack2中,这时候stack2 pop元素就是符合队列的形式了。如果push新的数据,继续push到stack1。

实现代码
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
// 如果stack2为空,则把全部stack1推到stack2
if(stack2.empty()) {
while(!stack1.empty()) {
int temp = stack1.top();
stack1.pop();
stack2.push(temp);
}
}
// 如果stack2还是空的话则抛出异常
if(stack2.empty()) {
return 0;
}
int temp = stack2.top();
stack2.pop();
return temp;
}
private:
stack<int> stack1;
stack<int> stack2;
};
扩展
用两个队列实现一个栈。
实现原理不难,push的操作全部push到一个队列如array1,然后pop的时候,把几乎全部元素pop到array22,直到剩下1个留在array1,这个元素就是stack要pop的元素,剩下同理。

作者:大傻逼
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号