《408 核心知识点梳理——数据结构篇》

📚 数据结构 (Data Structures)

1. 线性结构

  • 数组 (Array):连续存储的相同类型元素集合。支持随机访问(O(1)),但插入/删除平均需移动半数元素(O(n))1,2
  • 链表 (Linked List)
    • 单链表:节点包含数据域后继指针(next)。插入删除操作(给定前驱时)为 O(1),但查找需遍历(O(n))1,2
    • 双链表:节点包含前驱指针(prior), 数据域, 后继指针(next)。可双向遍历1,2
    • 循环链表:尾节点指向头节点(或头结点)。判断循环结束条件变为p != L(L为头指针)1
  • 栈 (Stack):后进先出 (LIFO)。顺序栈(数组实现)和链栈(链表实现)1,3。应用:函数调用栈、表达式求值、括号匹配1,3
  • 队列 (Queue):先进先出 (FIFO)。
    • 循环队列:基于数组,通过frontrear指针模运算解决“假溢出”2
      • 队空:Q.front == Q.rear;队满:(Q.rear + 1) % MaxSize == Q.front(牺牲一个单元)2
    • 链队列:通常带有头结点的单链表2
    • 双端队列 (Deque):两端都可插入删除3

2. 树与二叉树

  • 二叉树 (Binary Tree)
    • 性质
      1. 第 i 层至多有 2^(i-1) 个节点 (i>=1)。
      2. 深度为 k 的二叉树至多有 2^k - 1 个节点 (k>=1)。
      3. 叶子节点数 n0 = 度为2的节点数 n2 + 1 (n0 = n2 + 1)。
      4. 具有 n 个节点的完全二叉树深度为 ⌊log₂n⌋ + 11,2
    • 存储
      • 顺序存储:适用于完全二叉树。
      • 链式存储 (二叉链表)lchild | data | rchild1,2
    • 遍历
      • 先序 (根左右)、中序 (左根右)、后序 (左右根):递归或借助栈实现。
      • 层次遍历:借助队列实现1,3
    • 线索二叉树:利用空指针指向遍历序列的前驱或后继(ltagrtag标识指针含义)1
  • 树和森林
    • 存储结构:双亲表示法、孩子表示法、孩子兄弟表示法(可将树转换为二叉树)1
    • 森林与二叉树转换:森林中每棵树转为二叉树后,将后续二叉树作为前一颗二叉树根节点的右子树1
    • 遍历:树的先根遍历序列与其孩子兄弟表示法二叉树的先序序列相同;后根遍历与中序序列相同1
  • 应用
    • 二叉排序树 (BST):左子树节点值均小于根,右子树均大于根。中序遍历序列递增1,4
    • 平衡二叉树 (AVL):任意节点左右子树高度差绝对值不超过1。通过旋转(LL, RR, LR, RL)调整失衡1,4
    • 哈夫曼树 (Huffman Tree):带权路径长度 (WPL) 最小的二叉树(贪心算法构造)。用于哈夫曼编码(可变长前缀编码)1,4

3. 图 (Graph)

  • 存储结构
    • 邻接矩阵n x n 矩阵,A[i][j]表示边。适用于稠密图,判断边、求度高效,但空间复杂度 O(n²)1,4
    • 邻接表:为每个顶点建立边表(单链表)。适用于稀疏图,节省空间,但找入边难1,4
    • 十字链表 (有向图)邻接多重表 (无向图):分别高效处理有向图和无向图的相关操作1
  • 遍历
    • 广度优先搜索 (BFS):借助队列。可求无权图单源最短路径1,4
    • 深度优先搜索 (DFS):递归或借助栈1,4
  • 应用
    • 最小生成树 (MST)
      • Prim算法:贪心,适用于稠密图,O(|V|²)1,4
      • Kruskal算法:并查集判环,适用于稀疏图,O(|E|log|E|)1,4
    • 最短路径
      • Dijkstra算法:单源,无负权边。贪心,O(|V|²)1,4
      • Floyd算法:各顶点对之间。动态规划,O(|V|³)1,4
    • 拓扑排序:对有向无环图 (DAG) 产生一个线性序列(表示事件先后顺序)。通过选择入度为0的顶点并删除其出边实现1,4
    • 关键路径:在AOE网中求最长路径(决定总工期)。求事件最早发生时间 ve 和最迟发生时间 vl,活动最早开始时间 e 和最迟开始时间 l。关键活动满足 l(a) - e(a) = 01,4

4. 查找 (Searching)

  • 基本概念:平均查找长度 (ASL) 衡量性能1,2
  • 顺序查找:ASL成功 (n+1)/2,失败 n+12。对有序表、无序表均可1
  • 折半查找 (二分查找):要求有序顺序表。ASL ≈ log₂(n+1) - 12。判定树是平衡二叉排序树2
  • 分块查找:块间有序,块内无序。ASL 为索引查找与块内查找之和1,2
  • B树和B+树
    • B树 (多路平衡查找树):m阶B树满足:根节点至少2棵子树,非根节点至少 ⌈m/2⌉ 棵子树;所有叶子在同一层。用于磁盘索引1,2
    • B+树:与B树主要区别:非叶节点仅作索引,叶子节点包含所有关键字并链在一起。更适合数据库索引1,2
  • 散列表 (Hash Table)
    • 散列函数构造:直接定址法、除留余数法(常用)、数字分析法、平方取中法1,4
    • 处理冲突
      • 开放定址法(H(key) + di) % mdi可为线性探测、平方探测等1,4
      • 拉链法 (链地址法):将冲突关键字链在同一个单链表下1,4
    • 性能:取决于装填因子 α = n / m1

5. 排序 (Sorting)

  • 插入排序
    • 直接插入排序:稳定。最好(已有序)O(n),最坏/平均 O(n²)4
    • 折半插入排序:减少比较次数(约 O(n log n)),但移动次数未减少,总体仍 O(n²)4
    • 希尔排序 (Shell Sort):按增量分组插入,增量渐减。不稳定4
  • 交换排序
    • 冒泡排序:稳定。最好(已有序)O(n),最坏/平均 O(n²)4
    • 快速排序:分治,递归。平均 O(n log n),最坏(有序)O(n²)。不稳定4
  • 选择排序
    • 简单选择排序:不稳定。O(n²)4
    • 堆排序
      • 建堆(大根堆):从最后一个非叶节点开始调整。
      • 排序:交换堆顶与末尾元素,调整剩余为堆。
      • 不稳定。O(n log n)4
  • 归并排序:分治,稳定。O(n log n)。需要额外 O(n) 空间4
  • 基数排序:按位分配收集,稳定。O(d(n+r))4

注:计算机组成原理、操作系统、计算机网络部分将后续补充。 1,2,3,4,5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值