没有合适的资源?快使用搜索试试~ 我知道了~
自学北大张铭老师的<数据结构与算法>的自学笔记,综合了张老师的课件以及自己的理解。经典算法都附在了相应的章节之内。如有帮助,不胜荣幸!
资源推荐
资源详情
资源评论
1 章概论 .......................................................................................................................................... 6
1.1 什么是数据结构 ................................................................................................................ 6
1.1.1 数据逻辑结构 ......................................................................................................... 6
1.1.2 数据的存储结构 ..................................................................................................... 8
1.1.3 数据的运算 ............................................................................................................. 9
1.2 抽象数据类型 ADT (abstruct data structure) ................................................................. 9
1.3 算法的特性及分类 .......................................................................................................... 10
1.4 算法的效率度量 .............................................................................................................. 11
1.4.1 计算复杂性 ........................................................................................................... 11
1.4.2 算法的效率 ........................................................................................................... 11
1.4.3 大 O 表示法 .......................................................................................................... 12
1.4.4 大 Ω 表示法 .......................................................................................................... 13
1.4.5 大 Θ 表示法 .......................................................................................................... 13
1.4.6 渐进分析实例 ....................................................................................................... 13
1.5 最佳、最差和平均情况 .................................................................................................. 14
1.5.1 最佳、最差的作用 ............................................................................................... 14
1.5.2 时间和空间的折衷 ............................................................................................... 14
1.5.3 求解问题时对数据结构的选择和评价 ............................................................... 14
2 章线性表、栈和队列 ................................................................................................................. 14
2.1 线性表(linear list) ............................................................................................................ 14
2.1.1 线性表的逻辑结构 ............................................................................................... 15
2.1.2 线性表的存储结构 ............................................................................................... 16
2.2 顺序表—向量(sequential list - vector) ............................................................................ 16
2.2.1 定义....................................................................................................................... 16
2.2.2 检索....................................................................................................................... 17
2.2.3 插入算法执行时间 ............................................................................................... 17
2.2.4 删除算法 ............................................................................................................... 17
2.3 链表(linked list) ................................................................................................................. 17
2.3.1 单链表................................................................................................................... 18
2.3.2 双链表(double linked list) ..................................................................................... 21
2.3.3 循环链表(circularly linked list) ............................................................................. 22
2.3.4 几种主要链表比较 ............................................................................................... 23
2.4 线性表实现方法的比较 .................................................................................................. 23
2.5 栈(STACK) ......................................................................................................................... 24
2.5.1 定义....................................................................................................................... 24
2.5.2 抽象数据结构 ....................................................................................................... 24
2.5.3 栈的实现 ............................................................................................................... 24
2.5.4 顺序栈................................................................................................................... 24
2.5.5 链式栈................................................................................................................... 25
2.6 栈的应用........................................................................................................................... 27
2.6.1 栈的应用—计算表达式的值 ............................................................................... 27
2.6.3 递归到非递归的转换—背包问题 ....................................................................... 31
2.7 队列(queue) ..................................................................................................................... 38
2.7.1 定义....................................................................................................................... 38
2.7.2 抽象数据类型 ....................................................................................................... 38
2.7.3 顺序队列 ............................................................................................................... 38
2.7.4 链式队列 ............................................................................................................... 39
2.7.5 顺序队列与链式队列的比较 ............................................................................... 40
3 章 字符串.................................................................................................................................... 41
3.1 字符串抽象数据类型 ...................................................................................................... 41
3.2 字符串的存储结构和类定义 ......................................................................................... 42
3.2.1 字符串的顺序存储 ............................................................................................... 42
3.2.2 微软 VC++的 CString 类介绍 ............................................................................. 43
3.3 字符串的模式匹配 .......................................................................................................... 43
3.3.1 算法任务 ............................................................................................................... 43
3.3.2 朴素模式匹配 ....................................................................................................... 43
3.3.3 KMP 算法思想 ....................................................................................................... 44
3.3.4 字符串的特征向量 ............................................................................................... 44
4 二叉树 ........................................................................................................................................ 48
4.1 二叉树概念 ...................................................................................................................... 49
4.1.1 二叉树的定义及相关概念 ................................................................................... 49
4.1.2 满二叉树;完全二叉树;扩充二叉树 ............................................................... 50
4.2 二叉树的性质 .................................................................................................................. 51
4.3 二叉树的抽象数据类型 .................................................................................................. 52
4.3.1 逻辑结构+ 运算 ................................................................................................... 52
4.3.2 二叉树结点的类定义 ........................................................................................... 52
4.3.3 二叉树的类定义 ................................................................................................... 54
4.4 周游二叉树 ...................................................................................................................... 54
4.4.2 非递归深度优先周游二叉树 ............................................................................... 57
4.4.3 广度优先周游二叉树 ........................................................................................... 60
4.4.4 算法代价分析 ....................................................................................................... 61
4.5 二叉树的实现 .................................................................................................................. 61
4.5.1 用指针实现二叉树 ............................................................................................... 61
4.5.2 空间开销分析 ....................................................................................................... 63
4.5.3 用数组实现完全二叉树 ....................................................................................... 63
4.5.4 穿线二叉树 ........................................................................................................... 64
4.6 二叉搜索树 BST .............................................................................................................. 69
4.6.1 二叉搜索树(BST)定义 ...................................................................................... 69
4.6.2 二叉搜索树的插入 ............................................................................................... 70
4.6.3 二叉树结点删除算法 ........................................................................................... 71
4.6.4 二叉搜索树总结 ................................................................................................... 74
4.7 堆与优先队列 .................................................................................................................. 75
4.7.1 定义........................................................................................................................ 75
4.7.2 堆抽象数据类型 .................................................................................................... 75
4.7.3 建最小值堆过程 ................................................................................................... 75
4.7.4 建堆效率 ................................................................................................................ 80
4.8 Huffman 树和编码问题 .................................................................................................... 81
4.8.1 等长编码 ............................................................................................................... 81
4.8.2 数据压缩和不等长编码 ....................................................................................... 81
4.8.3 前缀编码 ............................................................................................................... 81
4.8.4 扩充二叉树与 Huffman 编码............................................................................... 81
5. 树 ............................................................................................................................................... 86
5.1 树的概念.......................................................................................................................... 86
5.1.2 森林与二叉树的等价转换 ................................................................................... 88
5.2 森林的链式存储 .............................................................................................................. 92
5.2.1 子结点表表示法 ................................................................................................... 92
5.2.2 左子结点/右兄弟结点表示法 ............................................................................. 93
5.2.3 动态结点表示法 ................................................................................................... 93
5.2.4 动态“左子/右兄弟”二叉链表 ......................................................................... 94
5.2.5 父指针表示法 (parent pointer) ......................................................................... 100
5.3 树的顺序存储 ................................................................................................................ 106
5.3.1 带右链的先根次序表示法 ................................................................................. 107
5.3.3 带左链的层次次序表示法 ................................................................................. 110
5.3.4 带度数的后根次序表示法 ................................................................................. 112
5.4 K 叉树.............................................................................................................................. 114
补充:树计数 ....................................................................................................................... 114
一. 二叉树计数 ............................................................................................................ 114
二. 树计数 .................................................................................................................... 117
6 图 .............................................................................................................................................. 118
6.1 图的基本概念 ................................................................................................................ 118
6.2 图的抽象数据类型 ........................................................................................................ 120
6.3 图的存储结构 ................................................................................................................ 123
6.3.1 图的相邻矩阵(adjacency matrix)表示法 ..................................................... 123
6.3.2 图的邻接表(adjacency list)表示法 ............................................................... 127
6.3.3 十字链表 ........................................................................................................... 129
6.4 图的周游(graph traversal)........................................................................................ 130
6.4.1 深度优先周游 ................................................................................................... 130
6.4.2 广度优先周游 ................................................................................................... 131
6.4.3 拓扑排序 ........................................................................................................... 132
6.5 最短路径 ...................................................................................................................... 134
6.5.1 单源最短路径 ................................................................................................... 134
6.5.2 每对顶点之间的最短路径 ............................................................................... 137
6.6 最小生成树 .................................................................................................................. 139
6.6.2 Kruskal 算法 ...................................................................................................... 142
7 内排序 ...................................................................................................................................... 144
7.1 基本概念........................................................................................................................ 144
7.1.1 基本概念 ............................................................................................................. 145
7.1.2 常用类和函数 ..................................................................................................... 145
7.2 三种O(n2)的简单排序 ................................................................................................. 146
7.2.1 插入排序 ............................................................................................................. 146
7.2.2 冒泡排序 ............................................................................................................. 148
7.2.3 直接选择排序 ..................................................................................................... 150
7.2.4 简单排序算法的时间代价对比 ......................................................................... 152
7.3 Shell 排序 ........................................................................................................................ 152
7.4 基于分治法的排序 ........................................................................................................ 155
7.4.1 快速排序 ............................................................................................................. 155
7.4.2 归并排序 ............................................................................................................. 161
7.5 堆排序............................................................................................................................ 165
7.6 分配排序和基数排序 .................................................................................................... 168
7.6.1 桶式排序 ............................................................................................................. 168
7.6.2 基数排序 ............................................................................................................. 170
7.7 各种排序算法的理论和实验时间代价 ........................................................................ 177
7.8 排序问题的下限 ............................................................................................................ 179
8 文件管理和外排序 ................................................................................................................... 180
8.1 主存储器和外存储器 .................................................................................................... 181
8.2 外存储器........................................................................................................................ 181
8.3 外存文件的组织 ............................................................................................................ 184
8.4 缓冲区和缓冲池 ............................................................................................................. 186
8.5 外排序............................................................................................................................ 187
8.5.1 置换选择排序 ..................................................................................................... 187
8.5.2 二路外排序 ......................................................................................................... 191
8.6 多路归并——选择树 .................................................................................................... 192
8.6.1 赢者树.................................................................................................................. 192
8.6.2 败方树................................................................................................................. 195
8.6.3 利用败方树的多路归并排序算法 ..................................................................... 201
8.6.4 最佳归并树 ......................................................................................................... 204
9 检索 ........................................................................................................................................... 204
9.1 基本概念........................................................................................................................ 205
9.2 基于线性表的检索 ........................................................................................................ 206
9.2.1 顺序检索 ............................................................................................................. 206
9.2.2 二分检索法 ......................................................................................................... 207
9.2.3 分块检索 ............................................................................................................. 209
9.3 集合的检索 .................................................................................................................... 210
9.4 散列检索........................................................................................................................ 211
9.4.0 散列中的基本问题 ............................................................................................. 211
9.4.1 散列函数 ............................................................................................................. 214
9.4.2 开散列方法(实用性强) ...................................................................................... 219
9.4.3 闭散列方法 ......................................................................................................... 221
9.4.4 闭散列表的算法实现 ......................................................................................... 224
9.4.5 散列方法的效率分析 ......................................................................................... 228
10 索引 ........................................................................................................................................ 230
10.0 基本概念...................................................................................................................... 231
10.1 线性索引 ............................................................................................................................. 232
10.1.1 线性索引文件 ................................................................................................... 232
10.1.2 线性索引的优点 ............................................................................................... 232
10.1.3 线性索引的问题 ............................................................................................... 232
10.1.4 二级线性索引 ................................................................................................... 232
10.1.5 二级线性索引的例子 ....................................................................................... 233
10.2 静态索引...................................................................................................................... 233
10.2.1 基本概念 ........................................................................................................... 233
10.2.2 多分树............................................................................................................... 233
10.2.2 ISAM ................................................................................................................... 235
10.3 倒排索引...................................................................................................................... 236
10.3.0 基本概念 ............................................................................................................ 236
10.3.1 基于属性的倒排 ............................................................................................... 237
10.3.2 对正文文件的倒排 ........................................................................................... 237
10.4 动态索引...................................................................................................................... 240
10.4.1 B 树 .................................................................................................................... 240
10.4.2 B+树 ................................................................................................................... 247
10.5.4 VSAM .................................................................................................................. 254
10.5.5 B 树的性能分析................................................................................................. 254
10.5 动态索引和静态索引性能的比较 .............................................................................. 256
补充:位图索引 ................................................................................................................... 257
11 高级线性表............................................................................................................................. 258
11.1 多维数组...................................................................................................................... 258
11.1.1 基本概念 ........................................................................................................... 258
11.1.2 数组的空间结构 ............................................................................................... 258
11.1.3 数组的存储 ....................................................................................................... 259
11.1.4 数组的声明 ....................................................................................................... 260
11.1.5 用数组表示特殊矩阵 ....................................................................................... 261
11.1.6 稀疏矩阵 ........................................................................................................... 261
11.2 广义表.......................................................................................................................... 264
11.2.1 基本概念 ........................................................................................................... 264
11.2.2 广义表的各种类型 ........................................................................................... 264
11.2.3 广义表的存储 ................................................................................................... 266
11.2.4 广义表的周游算法 ........................................................................................... 270
11.3 存储管理技术 .............................................................................................................. 271
11.3.1 内存管理存在的问题 ....................................................................................... 271
11.3.2 可利用空间表 ................................................................................................... 272
11.3.3 存储的动态分配和回收 ................................................................................... 274
11.3.4 伙伴系统 ........................................................................................................... 276
11.3.5 失败处理策略和无用单元回收 ....................................................................... 277
12 高级树结构............................................................................................................................. 278
12.1 Trie 结构和 Patricia 树 .................................................................................................. 279
12.1.1 Trie 结构 ............................................................................................................. 280
12.1.2 PATRICIA 结构 ................................................................................................... 281
12.1.3 后缀树(Suffix Tree) ........................................................................................... 283
12.2 二叉树结构的改进 ...................................................................................................... 286
12.2.1 最佳二叉排序树 ............................................................................................... 286
剩余314页未读,继续阅读
资源评论
qa1qa86
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功