第1章 概论 1
1.1什么是数据结构 1
1.1.1基本概念和术语 1
1.1.2数据的存储结构 3
1.1.3数据结构与数据类型 4
1.2为什么要学习数据结构 5
1.2.1数据结构的重要性 5
1.2.2数据结构的一个应用例子 6
1.3算法和算法分析 7
1.3.1算法的特点 7
1.3.2算法的度量 8
本章小结 10
习题 10
第2章 线性表 12
2.1线性表的定义及基本操作 12
2.1.1线性表的定义 12
2.1.2线性表的基本操作 13
2.2线性表的顺序存储 14
2.2.1顺序表的定义 14
2.2.2顺序表的基本操作 15
2.3线性表的链式存储 18
2.3.1单链表 18
2.3.2双向链表 25
2.3.3循环链表 29
2.3.4静态链表 31
2.4线性表的存储方式小结 33
2.5线性表的应用 33
2.5.1顺序表的应用 33
2.5.2链表的应用 36
本章小结 40
实验 40
习题 41
第3章 栈和队列 44
3.1栈 44
3.1.1栈的定义 44
3.1.2栈的基本操作 45
3.1.3栈的顺序存储 45
3.1.4栈的链式存储 48
3.2队列 50
3.2.1队列的定义 50
3.2.2队列的基本操作 51
3.2.3队列的顺序存储 51
3.2.4队列的链式存储 54
3.3栈和队列的应用 57
3.3.1栈的应用 57
3.3.2队列的应用 60
本章小结 63
实验 63
习题 64
第4章 串 67
4.1串的基本概念及基本运算 67
4.1.1串的基本概念 67
4.1.2串的基本操作 68
4.2串的存储结构 69
4.2.1串的顺序存储结构 69
4.2.2串的链式存储结构 71
4.3串的模式匹配运算 73
4.3.1基本的模式匹配算法 73
4.3.2模式匹配的改进算法——KMP算法 74
本章小结 76
实验 77
习题 77
第5章 数组和广义表 79
5.1数组的存储结构与寻址 79
5.1.1一维数组的存储结构 79
5.1.2二维数组的存储结构 80
5.2矩阵的压缩存储 81
5.2.1特殊矩阵 81
5.2.2稀疏矩阵 83
5.2广义表 87
本章小结 88
实验 88
习题 89
第6章 树和二叉树 91
6.1树的定义和基本术语 91
6.1.1树的概念 91
6.1.2树的表示 92
6.1.3树结构的基本术语 93
6.2二叉树 94
6.2.1二叉树的定义与基本操作 94
6.2.2二叉树的性质 95
6.2.3二叉树的存储结构 97
6.3遍历二叉树和线索二叉树 99
6.3.1遍历二叉树 99
6.3.2线索二叉树 103
6.4树和森林 108
6.4.1树的存储结构 108
6.4.2树、森林和二叉树之间的转换 111
6.4.3树和森林的遍历 113
6.5哈夫曼树及其应用 115
6.5.1什么是哈夫曼树 115
6.5.2哈夫曼树的构造 116
6.5.3哈夫曼编码 118
本章小结 120
实验 120
习题 121
第7章 图 124
7.1图的基本概念 124
7.2图的存储结构 126
7.2.1邻接矩阵表示法 127
7.2.2邻接表表示法 129
7.2.3有向图的邻接多重表 131
7.3图的遍历 133
7.3.1深度优先搜索 133
7.3.2广度优先搜索 136
7.4生成树与最小生成树 139
7.4.1无向图的连通分量和生成树 139
7.4.2构造最小生成树的普里姆(Prim)算法 140
7.4.3构造最小生成树的克鲁斯卡尔(Kruskal)算法 142
7.5最短路径 14
7.5.1非负权值的单源最短路径 143
7.5.2所有顶点之间的最短路径 145
7.6有向无环图及其应用 147
7.6.1拓扑排序 148
7.6.2关键路径 151
本章小结 155
实验 156
习题 156
第8章 查找 159
8.1基本概念与基本运算 159
8.1.1基本概念 159
8.1.2基本运算 161
8.2静态查找表 162
8.2.1顺序查找 162
8.2.2折半查找 164
8.2.3分块查找 167
8.2.4静态查找表三种查找方法比较 169
8.3动态查找表1——树表 169
8.3.1二叉排序树 170
8.3.2平衡二叉树(AVL树) 176
8.3.3 B—树和B+树 182
8.4动态查找表2——哈希表查找 188
8.4.1哈希表与哈希方法 188
8.4.2常用构造哈希函数的方法 189
8.4.3哈希冲突的处理方法 191
8.4.4哈希表的查找分析 194
本章小结 195
实验 195
习题 196
第9章 排序 200
9.1基本概念 200
9.2插入排序 202
9.2.1直接插入排序 202
9.2.2二分插入排序 203
9.2.3希尔排序 204
9.3交换排序 205
9.3.1冒泡排序 205
9.3.2快速排序 207
9.4选择排序 209
9.4.1直接选择排序 209
9.4.2树形选择排序 211
9.4.3堆排序 211
9.5归并排序 215
9.5.1二路归并排序 215
9.5.2多路归并排序 217
9.6分配排序 219
9.6.1多关键码排序 219
9.6.2链式基数排序 219
9.7各种内排序方法的比较和选择 223
9.7.1各种内排序方法的比较 223
9.7.2各种内排序方法的选择 223
本章小结 224
实验 224
习题 224
各章习题参考答案 230
参考文献 234