使用一个
队列来模拟栈,难点在pop()函数。
栈要首先弹出最后进入的元素。
所以,我们可以把队列对尾元素前面的元素,依次重新入队。
这个时候,原来的对尾就成了队头了。
在使用pop(),这时候弹出的就是最后插入的元素,即栈顶元素了。
#include <queue>
#include <iostream>
using namespace std;
class MyStack {
public:
MyStack() {
}
//新建一个队列,用这个队列来实现栈
queue<int> que;
void push(int x) {
que.push(x);
}
int pop() {
//size()函数:返回队列中元素个数
int size = que.size();
size--;//只需要移动size-1个元素,原来的对尾元素,即我们要弹出的元素不移动
while (size--) {
//fron()函数:取头头元素
que.push(que.front());
que.pop();
}
int result = que.front();
que.pop();
return result;
}
int top() {
//back函数:取队尾元素
int res = que.back();
return res;
}
bool empty() {
return que.empty();
}
};