第1章 绪论 1
1.1 什么是数据结构 1
1.2 数据结构的重要性 3
1.3 基本概念和术语 4
1.3.1 基本术语 4
1.3.2 数据的逻辑结构 5
1.3.3 数据的存储结构 5
1.3.4 数据的运算与实现 6
1.4 抽象数据类型 7
1.5 算法与算法分析 8
1.5.1 问题、算法和程序 8
1.5.2 算法设计的要求 9
1.5.3 算法分析 10
本章小结 12
练习题 13
第2章 线性表 16
2.1 线性表的基本概念 16
2.1.1 线性表的自然语言定义 17
2.1.2 线性表的ADT定义 17
2.2 线性表的顺序存储结构及其运算 18
2.2.1 顺序表的存储结构 18
2.2.2 顺序表的基本操作 19
2.2.3 顺序表的特点 24
2.3 线性表的链式存储结构及其运算 24
2.3.1 单链表的存储结构 24
2.3.2 单链表的基本运算 26
2.3.3 循环链表(Circular Linked List) 33
2.3.4 双向链表(Double Linked List) 33
2.3.5 线性表链式存储结构的特点 35
2.4 线性表的应用举例 35
2.5 上机实验 37
2.5.1 实验目的 37
2.5.2 实验内容 37
本章小结 38
练习题 38
第3章 栈和队列 41
3.1 栈的基本概念 41
3.1.1 栈的自然语言定义 41
3.1.2 栈的ADT定义 42
3.2 栈的顺序存储结构及其运算 42
3.2.1 栈的顺序存储结构 42
3.2.2 顺序栈的基本操作 43
3.3 栈的链式存储结构及其运算 46
3.3.1 栈的链式存储结构 46
3.3.2 链栈的基本操作 46
3.4 栈的应用举例 49
3.5 队列 51
3.5.1 队列的自然语言定义 51
3.5.2 队列的ADT定义 51
3.6 队列的顺序存储结构及其运算 52
3.6.1 队列的顺序存储结构 52
3.6.2 循环队列 53
3.6.3 循环队列的基本操作 54
3.7 队列的链式存储结构及其运算 57
3.7.1 队列的链式存储结构 57
3.7.2 链队列的基本操作 58
3.8 队列的应用举例 61
3.9 上机实验 62
3.9.1 实验目的 62
3.9.2 实验内容 63
本章小结 63
练习题 63
第4章 串 66
4.1 串的基本概念 66
4.1.1 串的自然语言定义 66
4.1.2 串的ADT定义 67
4.2 串的顺序存储结构及其运算 68
4.2.1 串的顺序定长存储结构 68
4.2.2 顺序串的基本操作 68
4.3 串的堆分配存储结构及其运算 70
4.3.1 串的堆分配存储结构 70
4.3.2 串的堆分配存储结构的基本操作 70
4.4 串的链式存储结构 71
4.5 串的应用举例 71
4.6 上机实验 73
4.6.1 实验目的 73
4.6.2 实验内容 74
本章小结 74
练习题 74
第5章 数组和广义表 76
5.1 数组的定义与存储 76
5.1.1 数组的定义 76
5.1.2 数组的顺序存储结构 77
5.2 矩阵的压缩存储 78
5.2.1 特殊矩阵 78
5.2.2 稀疏矩阵 81
5.3 广义表 86
5.3.1 广义表的定义 86
5.3.2 广义表的基本操作 87
5.3.3 广义表的存储结构 88
5.4 上机实验 90
5.4.1 实验目的 90
5.4.2 实验内容 90
本章小结 91
练习题 91
第6章 树 93
6.1 树的基本概念 93
6.1.1 树的自然语言定义 93
6.1.2 树的ADT定义 95
6.1.3 树的表示方法 95
6.1.4 树的基本术语 96
6.2 树的存储结构 97
6.2.1 树的顺序存储结构 97
6.2.2 树的链式存储结构 99
6.3 二叉树 99
6.3.1 二叉树的定义 100
6.3.2 二叉树的性质 100
6.3.3 二叉树的存储结构 102
6.3.4 二叉树的遍历 105
6.3.5 线索二叉树 109
6.3.6 二叉树的应用 112
6.4 树、森林与二叉树之间的转换 113
6.4.1 树、森林转换为二叉树 114
6.4.2 二叉树转换为树、森林 115
6.4.3 树和森林的遍历 116
6.5 哈夫曼树 117
6.5.1 哈夫曼树的基本概念 117
6.5.2 构造哈夫曼树 118
6.5.3 哈夫曼树的应用 119
6.6 上机实验 122
6.6.1 实验目的 122
6.6.2 实验内容 122
本章小结 123
练习题 123
第7章 图 126
7.1 图的基本概念 126
7.1.1 图的定义 126
7.1.2 图的基本术语 128
7.2 图的存储结构 129
7.2.1 邻接矩阵 130
7.2.2 邻接表 133
7.3 图的遍历 136
7.3.1 深度优先搜索遍历 137
7.3.2 广度优先搜索遍历 139
7.4 最小生成树 140
7.4.1 生成树 140
7.4.2 最小生成树 141
7.5 最短路径 150
7.5.1 从某个源点到其他各顶点的最短路径 151
7.5.2 每对顶点之间的最短路径 153
7.6 有向无环图及其应用 156
7.6.1 拓扑排序 156
7.6.2 关键路径 162
7.7 上机实验 165
7.7.1 实验目的 165
7.7.2 实验内容 165
本章小结 165
练习题 166
第8章 查找 170
8.1 查找的基本概念 170
8.2 静态查找表 171
8.2.1 顺序查找 172
8.2.2 折半查找 174
8.2.3 分块查找 176
8.3 动态查找表 177
8.3.1 二叉排序树 177
8.3.2 平衡二叉树 183
8.4 B-树和B+树 186
8.4.1 B-树 186
8.4.2 B+树 189
8.5 哈希表及其查找 189
8.5.1 哈希表的基本概念 190
8.5.2 哈希函数的构造方法 190
8.5.3 处理冲突的方法 192
8.5.4 哈希表的平均查找长度 194
8.6 上机实验 195
8.6.1 实验目的 195
8.6.2 实验内容 196
本章小结 196
练习题 196
第9章 排序 199
9.1 排序的基本概念 199
9.2 插入排序 200
9.2.1 直接插入排序 200
9.2.2 折半插入排序 203
9.2.3 希尔排序 205
9.3 交换排序 207
9.3.1 冒泡排序 207
9.3.2 快速排序 209
9.4 选择排序 211
9.4.1 直接选择排序 212
9.4.2 堆排序 213
9.5 归并排序 216
9.6 各种排序方法的比较 220
9.7 上机实验 221
9.7.1 实验目的 221
9.7.2 实验内容 221
本章小结 221
练习题 222
参考答案 224
参考文献 239