Skip to content

一、线性数据结构

1. 数组(Array)

  • 定义:连续内存存储的有序元素集合,通过索引访问。
  • 特点
    • 固定大小(静态数组)或动态扩展(动态数组)。
    • 快速随机访问(时间复杂度 O(1))。
  • 示例
    json
    // JSON 表示
    [1, 2, 3, 4, 5]
    python
    # Python 操作
    arr = [1, 2, 3]
    arr.append(4)       # 插入元素 → [1, 2, 3, 4]
    arr.pop(1)          # 删除索引1 → [1, 3, 4]

2. 链表(Linked List)

  • 定义:由节点组成的链式结构,每个节点包含值和指向下一节点的指针。
  • 特点
    • 内存非连续,插入/删除高效(时间复杂度 O(1))。
    • 不支持快速随机访问(查找需 O(n))。
  • 示例
    json
    // JSON 表示单链表节点
    {
      "value": 10,
      "next": {
        "value": 20,
        "next": null
      }
    }
    python
    # Python 实现单链表
    class Node:
        def __init__(self, val):
            self.val = val
            self.next = None
    
    node1 = Node(10)
    node2 = Node(20)
    node1.next = node2

3. 栈(Stack)

  • 定义后进先出(LIFO) 的线性结构,仅允许在顶端操作。
  • 操作
    • push(入栈)、pop(出栈)、peek(查看栈顶)。
  • 示例
    python
    # Python 用列表模拟栈
    stack = []
    stack.append(1)     # push → [1]
    stack.append(2)     # push → [1, 2]
    top = stack[-1]     # peek → 2
    stack.pop()         # pop → [1]

4. 队列(Queue)

  • 定义先进先出(FIFO) 的线性结构,队尾插入,队首删除。
  • 操作
    • enqueue(入队)、dequeue(出队)。
  • 示例
    python
    # Python 用 deque 实现队列
    from collections import deque
    queue = deque()
    queue.append(1)     # enqueue → [1]
    queue.append(2)     # enqueue → [1, 2]
    front = queue.popleft()  # dequeue → 1

二、树形数据结构

1. 二叉树(Binary Tree)

  • 定义:每个节点最多有两个子节点(左、右)。
  • 示例
    json
    // JSON 表示二叉树
    {
      "value": 10,
      "left": {
        "value": 5,
        "left": null,
        "right": null
      },
      "right": {
        "value": 15,
        "left": null,
        "right": null
      }
    }
    python
    # Python 实现二叉树节点
    class TreeNode:
        def __init__(self, val):
            self.val = val
            self.left = None
            self.right = None
    
    root = TreeNode(10)
    root.left = TreeNode(5)
    root.right = TreeNode(15)

2. 堆(Heap)

  • 定义:完全二叉树,满足父节点值总大于(大顶堆)或小于(小顶堆)子节点。
  • 用途:优先队列、堆排序。
  • 示例
    python
    # Python 使用 heapq 模块
    import heapq
    heap = []
    heapq.heappush(heap, 3)  # 插入 → [3]
    heapq.heappush(heap, 1)  # 插入 → [1, 3]
    min_val = heapq.heappop(heap)  # 弹出最小值 → 1

三、哈希结构

1. 哈希表(Hash Table)

  • 定义:通过哈希函数将键映射到值,实现快速查找(平均 O(1))。
  • 示例
    json
    // JSON 表示哈希表
    {
      "name": "Alice",
      "age": 30,
      "is_admin": true
    }
    python
    # Python 字典操作
    hashmap = {"name": "Alice", "age": 30}
    hashmap["email"] = "alice@example.com"  # 插入
    del hashmap["age"]                      # 删除
    val = hashmap.get("name")               # 查找 → "Alice"

四、图结构(Graph)

1. 邻接表表示法

  • 定义:用链表或数组存储每个顶点的邻居。
  • 示例
    json
    // JSON 表示无向图(顶点 0 连接 1 和 2)
    {
      "0": [1, 2],
      "1": [0, 2],
      "2": [0, 1]
    }
    python
    # Python 实现邻接表
    graph = {
        0: [1, 2],
        1: [0, 2],
        2: [0, 1]
    }

五、高级数据结构

1. 字典树(Trie)

  • 定义:用于高效存储和检索字符串的树形结构。
  • 示例
    json
    // JSON 表示存储单词 "apple" 和 "app"
    {
      "root": {
        "a": {
          "p": {
            "p": {
              "l": {
                "e": {"is_end": true}
              },
              "is_end": true
            }
          }
        }
      }
    }

2. 并查集(Disjoint Set)

  • 定义:管理元素分组,支持合并集合和查询根节点。
  • 操作
    • find(查找根节点)、union(合并集合)。
  • 示例
    python
    # Python 实现并查集
    class UnionFind:
        def __init__(self, size):
            self.parent = list(range(size))
        def find(self, x):
            if self.parent[x] != x:
                self.parent[x] = self.find(self.parent[x])
            return self.parent[x]
        def union(self, x, y):
            root_x = self.find(x)
            root_y = self.find(y)
            if root_x != root_y:
                self.parent[root_y] = root_x

六、数据结构的选择指南

场景推荐数据结构理由
快速查找键值对哈希表平均 O(1) 时间复杂度
维护操作顺序(如撤销)后进先出特性
广度优先搜索(BFS)队列先进先出保证层级遍历
有序数据动态插入平衡二叉搜索树(如红黑树)插入、删除、查找均 O(log n)
高频求最小值/最大值快速获取极值(O(1))

七、复杂数据结构的 JSON 表示

1. 嵌套对象和数组(模拟树)

json
{
  "name": "root",
  "children": [
    {
      "name": "child1",
      "children": [
        {
          "name": "grandchild1",
          "children": []
        },
        {
          "name": "grandchild2",
          "children": []
        }
      ]
    },
    {
      "name": "child2",
      "children": []
    }
  ]
}

2. 图的边列表表示

json
{
  "edges": [
    {
      "from": 0,
      "to": 1,
      "weight": 5
    },
    {
      "from": 1,
      "to": 2,
      "weight": 3
    },
    {
      "from": 2,
      "to": 0,
      "weight": 2
    }
  ]
}

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer