题目大意:用队列实现栈的模拟,要求能够进行push(),pop(),top(),empty()操作。
算法思想:
利用连个队列q1,q2来模栈,若两 队列都为空则说明栈为空;当入栈时判断哪个队列不空则将原素入该队列,如果队列都空则将元素入队列1;当做弹栈的操作时,判断哪个队列不空,将其元素取出且出队列此时判断队列是否为空若不空入队列2,若空则说明是栈顶元素 不入队列2同理可知取栈顶元素的操作。
代码如下:
class Stack {
public:
queue<int> q1,q2;
// Push element x onto stack.
void push(int x) {
if(!q1.empty())
q1.push(x);
else if(!q2.empty())
q2.push(x);
else
q1.push(x);
}
// Removes the element on top of the stack.
void pop() {
if(!q1.empty()){
while(!q1.empty()){
int temp=q1.front();
q1.pop();
if(!q1.empty())
q2.push(temp);
}
}
else{
while(!q2.empty()){
int temp=q2.front();
q2.pop();
if(!q2.empty())
q1.push(temp);
}
}
}
// Get the top element.
int top() {
if(!q1.empty()){
while(!q1.empty()){
int temp=q1.front();
q1.pop();
if(!q1.empty())
q2.push(temp);
else {
q2.push(temp);
return temp;
}
}
}
else{
while(!q2.empty()){
int temp=q2.front();
q2.pop();
if(!q2.empty())
q1.push(temp);
else{
q1.push(temp);
return temp;
}
}
}
}
// Return whether the stack is empty.
bool empty() {
return q1.empty()&&q2.empty();
}
};