算法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

posted on 2025-05-15 14:09  sakura430  阅读(12)  评论(0)    收藏  举报