第1章 绪论 1
1.1 数据结构 1
1.1.1 为什么要学习数据结构 1
1.1.2 基本概念和术语 2
1.1.3 数据结构的逻辑结构和存储结构 3
1.2 算法 5
1.2.1 算法的概念及描述 5
1.2.2 算法分析 6
本章小结 9
习题一 10
第2章 线性表 12
2.1 线性表的基本概念及操作 12
2.1.1 线性表的定义 12
2.1.2 线性表的基本操作 13
2.2 线性表的顺序存储结构 13
2.2.1 线性表的顺序存储结构——顺序表 13
2.2.2 顺序表的基本操作 14
2.2.3 顺序表的应用 17
2.3.1 线性表的链式存储结构——链表 20
2.3 线性表的链式存储结构 20
2.3.2 单链表的基本操作 22
2.3.3 双向链表 25
2.3.4 循环链表 28
2.3.5 单链表的应用 29
2.3.6 链式存储结构的特点 31
本章小结 31
习题二 31
3.1.1 栈的定义和基本操作 34
3.1 栈 34
第3章 栈和队列 34
3.1.2 栈的顺序存储结构 35
3.1.3 栈的链式存储结构 37
3.1.4 递归 39
3.2 队列 42
3.2.1 队列的定义及基本操作 42
3.2.2 队列的顺序存储 42
3.2.3 队列的链式存储 49
3.3 栈和队列应用 51
3.3.1 栈的应用 51
3.3.2 队列的应用 54
本章小结 56
习题三 57
第4章 串 59
本章小结 65
习题四 65
第5章 数组和广义表 67
5.1 数组 67
5.1.1 数组的定义及基本操作 67
5.1.2 数组的顺序存储 68
5.2.1 特殊矩阵及压缩存储 70
5.2 稀疏矩阵 70
5.2.2 稀疏矩阵的定义 71
5.2.3 稀疏矩阵的顺序存储 71
5.2.4 稀疏矩阵的链式存储 73
5.3 广义表 73
5.3.1 广义表的定义 73
5.3.2 广义表的存储结构和基本操作 74
本章小结 76
习题五 77
6.1.1 树的定义 78
第6章 树和二叉树 78
6.1 树的基本概念 78
6.1.2 树的逻辑表示 79
6.1.3 树的基本术语 79
6.2 树的存储结构和基本操作 80
6.2.1 树的存储结构 80
6.2.2 树的基本操作 83
6.3 二叉树的基本概念和基本性质 83
6.3.1 二叉树的定义 83
6.3.2 二叉树的基本性质 85
6.4 二叉树的存储结构和基本操作 86
6.4.1 顺序存储结构 86
6.4.2 链式存储结构 87
6.4.3 基本操作 89
6.5 二叉树的遍历 91
6.5.1 前序遍历 91
6.5.2 中序遍历 92
6.5.3 后序遍历 92
6.5.4 层次遍历 93
6.5.5 二叉树遍历的非递归实现 94
6.6 树和森林及二叉树之间的关系 97
6.6.1 树转换成二叉树 97
6.6.2 森林转换成二叉树 98
6.6.3 二叉树转换成森林 99
6.7 二叉排序树 100
6.7.1 二叉排序树定义 100
6.7.2 二叉排序树的操作 100
6.8 哈夫曼树及其应用 104
6.8.1 哈夫曼树(最优二叉树) 104
6.8.2 哈夫曼树的构造及算法实现 106
6.8.3 哈夫曼编码 107
本章小结 109
习题六 110
第7章 图 113
7.1 图的基本概念 113
7.1.1 图的定义 113
7.1.2 图的基本术语 114
7.2 图的存储结构 115
7.2.1 邻接矩阵 116
7.2.2 邻接表 117
7.3 图的遍历 119
7.3.1 深度优先搜索DFS(Depth First Search) 119
7.3.2 广度优先搜索BFS(Breadth First Search) 121
7.4 生成树及最小生成树 122
7.4.1 生成树 122
7.4.2 最小生成树 123
7.4.3 最小生成树的构造方法 123
7.5 最短路径 125
7.6 拓扑排序 127
本章小结 129
习题七 130
第8章 查找 132
8.1 基本概念 132
8.1.1 查找表 132
8.1.2 关键字、主关键字和次关键字 132
8.1.3 查找 132
8.1.4 查找算法的效率分析 133
8.2 线性表的查找 133
8.2.1 顺序存储的顺序查找 133
8.2.2 链式存储的顺序查找 134
8.2.3 折半查找 135
8.3 树上的查找 139
8.3.1 二叉排序树 139
8.3.2 二叉排序树的查找 139
8.3.3 二叉排序树的插入 140
8.4 哈希(Hash)表查找 141
8.4.1 哈希表的概念 141
8.4.3 解决冲突的方法 142
8.4.2 哈希函数的构造方法 142
8.4.4 哈希表查找及其分析 144
本章小结 145
习题八 145
第9章 排序 147
9.1 基本概念 147
9.1.1 排序 148
9.1.2 稳定排序与不稳定排序 148
9.2 插入排序 149
9.2.1 直接插入排序 149
9.1.3 内排序和外排序 149
9.1.4 待排序记录序列的存储结构 149
9.2.2 希尔排序 150
9.3 选择排序 152
9.3.1 直接选择排序 152
9.3.2 堆排序 154
9.4 交换排序 158
9.4.1 冒泡排序 158
9.4.2 快速排序 159
9.5 归并排序 160
9.6.1 基数排序的基本思想 162
9.6 基数排序 162
9.6.2 链式基数排序算法 164
9.7 各种排序算法的比较 167
9.7.1 各种排序算法的比较 167
9.7.2 排序方法的选择 167
本章小结 168
习题九 168
附录一 综合实训 170
附录二 部分习题答案 193
参考文献 207