这道题不涉及算法,可以帮助我们理解栈和队列的各种操作。要想实现栈的push直接调用队列的push即可,难点就在于如何用队列实现栈的pop操作。我们需要用循环使用push和pop操作将队列的最后一个元素之前的元素全部移动到最后一个元素之后(不改变元素相对顺序),然后调用pop,这样就实现了让队列中最后进的元素最先出,也就是栈的特点。;另外还有一些注意点我写在代码注释中;
代码如下:
class MyStack {
public:
queue<int> que;
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
int size = que.size();
size--;
int res;
//通过循环,将最后一个元素之前的元素全部移动到后面(不改变元素相对顺序)
while(size--){
que.push(que.front());
que.pop();
}
res = que.front();
que.pop();
return res;
}
//队列的末尾元素就是栈的顶部元素
int top() {
return que.back();
}
//队列为空,栈就为空
bool empty() {
return que.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();
*/