队列遵循FIFO原则,推荐用collections.deque实现,append()入队、popleft()出队;栈用list即可,append()压栈、pop()弹栈;链表需自定义Node类理解指针逻辑;集合set基于哈希表,支持O(1)成员判断和自动去重。

队列:先进先出的有序容器
队列(Queue)模拟现实中的排队场景,遵循“先进先出”(FIFO)原则。Python 标准库中 collections.deque 是实现队列最常用、最高效的方式,支持在两端快速添加和删除元素。
- 入队用 append()(右侧加入),出队用 popleft()(左侧弹出)
- 避免用 list 的
pop(0)模拟出队——时间复杂度为 O(n),效率低 - 简单示例:q = deque([1, 2, 3]); q.append(4); q.popleft() → 返回 1
栈:后进先出的操作模型
栈(Stack)适用于需要回溯、嵌套解析等场景,如括号匹配、函数调用栈模拟。Python 中直接用普通 list 就能高效实现栈,因其 append() 和 pop() 均为 O(1) 操作。
- 压栈用 append(),弹栈用 pop()(默认弹末尾)
- 检查是否为空:用
if stack:而非len(stack) > 0,更简洁安全 - 典型用途:逆序输出、深度优先搜索(DFS)辅助结构
链表:手动构建的动态线性结构
Python 内置类型不直接提供链表,但可通过自定义类清晰理解其指针逻辑。单链表由节点(Node)组成,每个节点含数据域和指向下一节点的引用。
- 定义节点类:
class Node: def __init__(self, val): self.val = val; self.next = None - 插入、删除操作需手动更新指针,不涉及整体移动,适合频繁中间修改但查询慢(O(n))
- 实际开发中,除非教学或特定算法题,否则优先用 deque 或 list;链表价值在于理解内存与引用关系
集合:去重与快速成员判断
集合(set)是无序、不重复、可变的内置类型,底层基于哈希表,因此 in 判断平均时间复杂度为 O(1),远快于 list 的 O(n)。
立即学习“Python免费学习笔记(深入)”;
- 创建方式:
s = {1, 2, 3}或s = set([1, 2, 2, 3])(自动去重) - 常用操作:
s.add(x)、s.remove(x)、s & t(交集)、s | t(并集) - 注意:set 不支持索引和切片;若需有序且去重,可用
dict.fromkeys(seq).keys()(Python 3.7+ 保持插入顺序)










