本题是使用队列来实现栈,在栈实现队列时,我们使用了输入栈和输出栈来调整输出顺序,但时队列不同,队列元素先入先出,即使使用两个队列,也没法调整到先入后出。因此做法是依次将队列元素出队,然后再让其入队,当出队元素是 最初的队列 最后一个元素时,它就是栈顶元素。代码如下:
在top()函数中,可以直接返回 que.back(),也能直接得到队列的最后一个元素。
cpp
class MyStack {
public:
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
int size = que.size() - 1;
while(size--){
que.push(que.front());
que.pop();
}
int result = que.front();
que.pop();
return result;
}
int top() {
int result = this->pop();
this->push(result);
return result;
}
bool empty() {
return que.empty();
}
private:
queue<int> que;
};
/**
* 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();
*/