本书是为数据结构课程编写的教材,采用逐步演算和编程运行相结合的方式,前半部分从抽象数据类型的角度,分别讨论典型数据结构的逻辑特性、存储表示和相关算法,后半部分主要讨论查找和排序的各种算法及其综合分析比较。书中对大多数算法进行时间复杂度的分析,采用C语言作为数据结构对应算法的编程语言。
样章试读
目录
- 目录
前言
第1章 绪论 1
1.1 数据结构的研究与发展 1
1.1 国外的研究与发展 1
1.1.2 国内的研究与发展 1
1.1.3 数据结构在计算机专业巾的地位 2
1.2 什么是数据结构 3
1.3 数据结构的基础知识 7
1.4 数据类型与抽象数据类型 11
1.5 算法和算法的量度 14
1.5.1 算法简述 14
1.5.2 算法的特征 14
1.5.3 算法对应的程序设计模式 15
1.5.4 时间复杂度 21
1.5.5 空间复杂度 24
1.6 数据结构的选择与评价 25
第2章 线性表 27
2.1 线性表的基本概念 27
2.1.1 线性表的定义 27
2.1.2 线性表的抽象数据类型定义 27
2.1.3 线性表的存储结构 29
2.1.4 线性表的抽象数据类型定义的应用 30
2.2 线性表的顺序存储结构 33
2.2.1 线性表的顺序存储结构定义 33
2.2.2 线性表的顺序存储结构的基本操作 33
2.3 线性表的链式存储结构 39
2.3.1 线性表的链式存储结构定义 39
2.3.2 线性表的链式存储结构的基本操作 40
2.3.3 循环链表与双向链式存储结构及操作 48
2.4 顺序表与链表的比较 52
2.5 线性表的应用例子 54
2.5.1 元多项式的线性表的顺序存储结构及运算 54
2.5.2 元多项式的线性表的链式存储结构 54
第3章 栈和队列 61
3.1 栈的基本概念 61
3.1.1 栈的定义 61
3.1.2 栈的抽象数据类型定义 62
3.1.3 栈的表示和实现 62
3.2 栈的应用 68
3.2.1 数制转换 68
3.2.2 括号匹配 70
3.2.3 运用栈实现行编辑程序 72
3.2.4 迷宫求解 74
3.2.5 表达式求值 81
3.3 栈与递归 88
3.3.1 递归的概念 88
3.3.2 递归过程的内部实现 90
3.3.3 递归消除 91
3.3.4 阅读一个递归程序 95
3.4 队列的基本概念 106
3.4.1 队列的定义 106
3.4.2 队列的抽象数据类型定义 107
3.4.3 队列的表示和实现 108
3.5 队列的应用——离散事件模拟的例子 115
第4章 串 123
4.1 串的基本概念 123
4.1.1 串的定义 123
4.1.2 串的抽象数据类型定义 124
4.1.3 C语言函数库中的串处理函数 127
4.2 串的存储结构及算法 128
4.2.1 申的静态存储结构及算法 128
4.2.2 串的动态存储结构及算法 132
4.3 串的模式匹配算法 137
4.3.1 模式匹配的朴素算法 137
4.3.2 模式匹配的首尾匹配算法 139
4.3.3 KMP算法 141
4.4 文本编辑的应用 147
4.4.1 文本编辑举例 147
4.4.2 高级语言程序设计的编译方法 148
第5章 数组和广义表 152
5.1 数组的基本概念 152
5.1.1 数组的定义 152
5.1.2 数组的抽象数据类型定义 153
5.1.3 数组的表示和实现 153
5.2 数组的应用——矩阵的压缩存储 158
5.2.1 特殊矩阵 158
5.2.2 稀疏矩阵 160
5.3 广义表的基本概念 177
5.3.1 广义表的定义 177
5.3.2 广义表的抽象数据类型定义 179
5.3.3 广义表的表示和实现 180
第6章 树和二叉树 185
6.1 树的基本概念 185
6.1.1 树的定义 185
6.1.2 树的抽象数据类型定义 187
6.2 二叉树的基本概念 188
6.2.1 二叉树的定义 188
6.2.2 二叉树的抽象数据类型定义 189
6.2.3 二叉树的性质 191
6.2.4 二叉树的存储结构 193
6.3 遍历二叉树 196
6.3.1 问题的提出 196
6.3.2 二叉树遍历算法 197
6.3.3 二叉树遍历递归算法的应用 202
6.4 绒索二叉树 205
6.4.1 问题的提出 205
6.4.2 线索二叉树的存储结构 205
6.4.3 二叉树的中序线索化 207
6.5 树和森林 224
6.5.1 树、森林与二叉树的相互转换 224
6.5.2 树与森林的存储 226
6.5.3 树和森林的遍历 229
6.6 哈夫曼树及其应用 230
6.6.1 最优二叉树(哈夫曼树) 230
6.6.2 哈夫曼编码 233
6.6.3 哈夫曼树与判定树 240
第7章 图 242
7.1 图的基本概念 242
7.1.1 图的定义 242
7.1.2 图的抽象数据类型定义 247
7.1.3 图的存储结构 248
7.2 图的遍历 253
7.2.1 深度优先搜索 254
7.2.2 广度优先搜索 266
7.3 生成树与最小生成树 271
7.3.1 Prim算法 273
7.3.2 Kruskal算法 276
7.3.3 生成树与图的遍历 278
7.4 两点之间的最短路径 279
7.4.1 从某个源点到其余各顶点的最短路径 280
7.4.2 每一对顶点之间的最短路径 285
7.5 拓扑排序 287
7.5.1 拓扑排序的定义 287
7.5.2 关键路径 295
第8章 查找 306
8.1 查找的基本概念 306
8.2 静态查找表 307
8.2.1 无序顺序表查找——顺序查找 307
8.2.2 有序顺序表的查找——折半查找 310
8.2.3 索引顺序表查找——分块查找 313
8.3 动态查找表 315
8.3.1 二叉排序树 315
8.3.2 平衡二叉树 321
8.4 哈希表 329
8.4.1 什么是哈希表 329
8.4.2 哈希函数的构造方法 330
8.4.3 处理冲突的方法 332
8.4.4 哈希表的查找 337
8.4.5 哈希表实现的比较 338
第9章 内部排序 340
9.1 排序的基本概念 340
9.2 插入排序 341
9.2.1 直接插入排序 341
9.2.2 折半插入排序 344
9.2.3 表插入排序 345
9.2.4 希尔排序 347
9.3 交换排序 350
9.3.1 起泡排序 350
9.3.2 快速排序 351
9.4 选择排序 354
9.4.1 简单选择排序 354
9.4.2 堆排序 356
9.5 归并排序 360
9.6 分配排序 363
9.6.1 多关键字排序 363
9.6.2 基数排序 364
9.7 各种内部排序方法的比较 368
参考文献 370