思想:用一个队列即可,用循环将队首元素放到队尾(除最后一个元素外),然后顺序出队列
实现函数:
push(x) -- 元素 x 入栈
pop() -- 移除栈顶元素
top() -- 获取栈顶元素
empty() -- 返回栈是否为空
class MyStack {
public:
queue<int> que;//创建队列
MyStack() {
}
//放入队列
void push(int x) {
que.push(x);
}
//弹出队列
int pop() {
int size = que.size();
size--;//循环次数
while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
que.push(que.front());
que.pop();//弹出循环过的元素
}
int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了
que.pop();
return result;
}
int top() {
return que.back();
}
bool empty() {
return que.empty();
}
};
注意:queue.front():是最早进队列的元素
queue.back():是最晚进队列的元素