题目描述
用两个队列来实现一个栈,完成栈的Push和Pop操作。 栈中的元素为int类型。
思路:利用队列的先进先出,犹如一条龙循环穿梭在队列A、B一样,每次新元素进,则进入队列的尾部,具体定义如下:
- 栈的push操作,首先找到有元素的队列(两队都为空则元素入队列B),将元素入此队
- 栈的pop操作,将有元素的队列的元素以此出队并以此入另一队,直到最后一个元素,直接将至元素出队实现pop操作
- 上述两个操作的病原则就是保证将元素全部放在一个队,当需要栈的pop操作时,犹如一条龙循环从当前队列穿梭到另一队列,并去除最尾部的元素,当需要栈的push操作时,将新元素直接添加到龙的尾部
实现:
void push(int node)
{
int size1=queue1.size();
int size2=queue2.size();
if(size1) queue1.push(node);
else queue2.push(node);
}
int pop()
{
int size1=queue1.size();
int size2=queue2.size();
if(size1)
{
for(int i=0;i<size1-1;i++)
{
queue2.push(queue1.top());
queue1.pop();
}
int rvalue=queue1.top();
queue1.pop();
return rvalue;
}
else if(size2)
{
for(int i=0;i<size2-1;i++)
{
queue1.push(queue2.top());
queue2.pop();
}
int rvalue=queue2.top();
queue2.pop();
return rvalue;
}
return 0;
}