用队列实现栈
https://leetcode.cn/problems/implement-stack-using-queues/
/*方法一:使用两个队列
q1:存储栈内的元素
q2: 辅助队列
入栈时:先让元素入q2,然后当q1不空时,q2入队(q1的队首元素),q1出队;最后q1和q2交换;
*/
class MyStack {
public:
queue<int> q1,q2;
MyStack() {
}
void push(int x){
q2.push(x);
while(!q1.empty()){
q2.push(q1.front());
q1.pop();
}
swap(q1,q2);
}
int pop() {
int res = q1.front();
q1.pop();
return res;
}
int top() {
return q1.front();
}
bool empty() {
return q1.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
/*方法二:一个队列
入栈时:首先获得入栈前的元素的个数n,然后将元素入队,再将队列中的前n个元素依次出队并入队。
*/
class MyStack {
public:
queue<int> q;
MyStack() {
}
void push(int x) {
int n = q.size();
q.push(x);
while(n--){
q.push(q.front());
q.pop();
}
}
int pop() {
int res = q.front();
q.pop();
return res;
}
int top() {
return q.front();
}
bool empty() {
return q.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/