两个对队列实现栈要比两个栈实现队列稍微要绕一点,要将两个队列混合使用,实现栈,借助于这位博主的图片一用,
整个过程的实现机制如下:
第一步:先让数据a进入Q1队列中(也可以进入到Q2中)
第二步:因为Q2为空,则让数据b进入到Q2中,这时候把Q1中的a放入到Q2中,Q2变成了把a、b了
第三步:因为Q1为空,则让数据c进入到Q1中,这时候把Q2中的数据放到Q1中,Q1变成了a、b、c了
第四步:因为Q2再次为空了,则让数据d进入到Q2中,这时候把Q1中的数据a、b、c放入到Q2中,Q2变成了a、b、c、d了
代码:
class Stack {
public:
//数据进入到栈,两个队列互相使用
void push(int x) {
if (!q1.empty())
{
q2.push(x);
while (!q1.empty())
{
q2.push(q1.front());
q1.pop();
}
}
else
{
q1.push(x);
while (!q2.empty())
{
q1.push(q2.front());
q2.pop();
}
}
}
//移除栈顶元素
void pop() {
if (q1.empty()&&q2.empty())
throw new exception("stack is empty");
else if (!q1.empty())
q1.pop();
else
q2.pop();
}
//返回栈顶元素
int top() {
if (!q1.empty())
return q1.front();
else
return q2.front();
}
// 返回栈是否为空栈
bool empty() {
return (q1.empty()&&q2.empty());
}
private:
queue<int> q1, q2;
};