题目:用队列实现栈
分析:和之前那个用栈实现队列是姐妹篇。这个的奥义在于,一定要保证2个队列中的一个为空。这样就可以把新加入的元素放到空队列中,再将非空队列的元素一个个加入该队列,这样就实现了新入的在队首。
答案:
class Stack {
public:
queue<int> q1;
queue<int> q2;
// Push element x onto stack.
void push(int x) {
if(q1.empty()){
q1.push(x);
while(!q2.empty()){
q1.push(q2.front());
q2.pop();
}
}else{
q2.push(x);
while(!q1.empty()){
q2.push(q1.front());
q1.pop();
}
}
}
// Removes the element on top of the stack.
void pop() {
if (q1.empty()){
q2.pop();
}else{
q1.pop();
}
}
// Get the top element.
int top() {
if (q1.empty()){
return q2.front();
}else{
return q1.front();
}
}
// Return whether the stack is empty.
bool empty() {
return q1.empty()&&q2.empty();
}
};