算法day29 用队列实现栈
题目描述

思路:“虚拟循环”队列
关于如何实现用队列模拟栈,这里主要介绍单队列实现的方式。整体的功能和上一道题相似,主要差别在于单队列实现栈的特性主要通过不断的出队列留“栈顶”,再将元素添加回来的方式。
代码如下
class MyStack {
public:
queue<int> que;
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
int cnt = que.size()-1;
while(cnt--){//由于栈的特性,使用队列模拟栈的顺序,需要将队列中的前n-1个元素添加到尾元素之后
que.push( que.front());
que.pop();
}
int x = que.front();
que.pop();
return x;
}
int top() {
int x = this -> pop();
que.push(x);//调用pop()后弹出的元素,将其复原
return x;
}
bool empty() {
if(que.empty()) return true;
return false;
}
};
时间复杂度:O(1)
空间复杂度:O(n)
END
浙公网安备 33010602011771号