栈和队列是两种受限的线性数据结构,操作受限反而让它们在某些场景大放异彩。

一、栈(Stack):后进先出 LIFO

栈像一摞盘子,只能在顶部操作:压入(push)、弹出(pop)、查看栈顶(peek)。

stack = []
stack.append(1)        # push
stack.append(2)
stack.pop()            # pop → 2
stack[-1]             # peek → 1

二、栈的应用

三、队列(Queue):先进先出 FIFO

队列像排队买票,从队尾进、队头出。

from collections import deque
queue = deque()
queue.append(1)        # 入队
queue.append(2)
queue.popleft()        # 出队 → 1
Python 用 collections.deque 而非普通 list 实现队列,因为 list 的 pop(0) 是 O(n),deque 的 popleft() 是 O(1)。

四、队列的应用

五、变体

六、典型面试题

七、复杂度

操作        栈      队列
入          O(1)    O(1)
出          O(1)    O(1)
查看        O(1)    O(1)
查找        O(n)    O(n)

八、小结

栈和队列看似简单,应用极广。理解"何时用栈、何时用队列",能解决一大类算法问题。优先队列(堆)是进阶重点。