用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路:用两个栈,一个Data栈,用来放Push数据,另外一个Temp栈,用来复制Data栈里面的内容。进入Data栈里面的数据是先入后出,再从Data出来压入Temp栈里面也是先入后出,两次的先入后出就变成了队列。当然需要注意数据压入Temp栈需要条件:1、Temp栈为空的时候,否则会乱掉。2、Data栈数据一次性全部压入Temp栈,否则也会出错。
**C++程序 **
class Solution
{
public:
void push(int node) {
stack1.push(node); //压入栈,stack1作为data栈
}
int pop() {
int a;
if(stack2.empty()) //当第二个栈为空的时候才能复制交换
{
while(!stack1.empty())//要全部的都复制
{
a = stack1.top(); //栈顶的数一个一个取出
stack2.push(a); //压数据入栈 这样两个栈数据是倒的
stack1.pop(); //返回栈顶的值
}
}
a = stack2.top(); //给出栈顶的数
stack2.pop(); //返回栈顶的值
return a; //因为数据是倒的,实现了先入先出的原则,队列
}
private:
stack<int> stack1;
stack<int> stack2;
};