用队列实现栈:单队列旋转法
副标题 / 摘要 只有队列(FIFO)时,也能实现栈(LIFO)。本文展示单队列旋转法,并分析复杂度与边界。 目标读者 刷题与面试准备的开发者 需要理解数据结构转换的人 初中级算法学习者 背景 / 动机 栈的后进先出与队列的先进先出相反。 “旋转队列”可以把最新元素移动到队头,从而模拟栈顶。 核心概念 队列(FIFO):先进先出 栈(LIFO):后进先出 队列旋转:把新元素转到队首 实践指南 / 步骤 入栈:将元素入队 旋转队列:把队首依次出队再入队,直到新元素位于队首 出栈:直接出队 取栈顶:查看队首 可运行示例 from collections import deque class MyStack: def __init__(self): self.q = deque() def push(self, x: int) -> None: self.q.append(x) for _ in range(len(self.q) - 1): self.q.append(self.q.popleft()) def pop(self) -> int: return self.q.popleft() def top(self) -> int: return self.q[0] def empty(self) -> bool: return not self.q if __name__ == "__main__": s = MyStack() s.push(1) s.push(2) print(s.top()) print(s.pop()) print(s.empty()) 解释与原理 每次 push 后旋转队列,使新元素位于队首。 这样 pop 就相当于弹出“栈顶”。 ...