Python数据结构教程_队列栈链表集合详解与示例

16次阅读

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

Python数据结构教程_队列栈链表集合详解与示例

队列:先进先出的有序容器

队列(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+ 保持插入顺序)
text=ZqhQzanResources