使用队列实现栈的下列操作:
-
push(x) :元素 x 入栈
-
pop() :移除栈顶元素
-
top() : 获取栈顶元素
-
empty() :返回栈是否为空
用两个队列que1和que2实现栈的功能,que2其实完全就是一个备份的作用,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。
1.入栈时,直接将元素入队。
2.出栈时,先将que1最后元素以外的元素都移入que2中,弹出que1最后的元素,再将que2中的元素导入que1中。
3.栈顶元素为que1.back()。
4.栈是否为空直接判断队列1是否为空即可。
实现代码如下:
//用队列实现栈
queue<int> q1;
queue<int> q2;
MyStack() {}
//元素x入栈
void push(int x) {
q1.push(x);
}
//移除栈顶元素,并返回
int pop() {
int size = q1.size();
while(size > 1) {
int i = q1.front();
q2.push(i);
q1.pop();
size--;
}
int r = q1.front();
q1.pop();
while(!q2.empty()) {
int j = q2.front();
q1.push(j);
q2.pop();
}
return r;
}
//返回栈顶元素
int top() {
return q1.back();
}
//判断是否为空
bool empty() {
return q1.empty();
}