图书目录

第0章预备知识1

0.1数学预备知识1

0.1.1常用数学术语1

0.1.2对数1

0.1.3级数求和2

0.2常用数学证明方法3

0.2.1反证法3

0.2.2数学归纳法3

0.3离散数学预备知识4

0.3.1集合4

0.3.2谓词6

0.3.3关系6

0.4C++程序设计语言预备知识7

0.4.1程序结构7

0.4.2变量、常量与数据类型8

0.4.3控制语句13

0.4.4函数14

0.4.5继承与派生19

0.4.6多态与虚函数20

0.4.7模板21

0.4.8动态存储分配22

0.4.9输入与输出23

0.4.10异常处理23

第1章绪论27

1.1数据结构的兴起和发展27

1.2数据结构的研究对象29

1.3数据结构的基本概念31

1.3.1数据结构31

1.3.2数据结构的访问接口33

1.3.3抽象数据类型33

1.4算法及算法分析35

1.4.1算法35

1.4.2算法分析38

1.5案例综述42

习题145

思考题147

第2章线性表49

2.1线性表的逻辑结构49

2.1.1线性表的定义49

2.1.2线性表的抽象数据类型定义50

2.2线性表的顺序存储结构及实现51

2.2.1线性表的顺序存储结构——顺序表51

2.2.2顺序表的实现52

2.3线性表的链接存储结构及实现57

2.3.1线性表的链接存储结构——单链表58

2.3.2单链表的实现59

2.4顺序表和单链表的比较66

2.4.1时间性能比较66

2.4.2空间性能比较66

2.5线性表的其他存储方法67

2.5.1循环链表67

2.5.2双链表68

2.5.3静态链表69

2.5.4间接寻址70

2.6应用举例71

2.6.1顺序表的应用举例——符号表71

2.6.2单链表的应用举例——一元多项式求和72

2.6.3高校学籍管理75

习题276

思考题279

第3章特殊线性表——栈、队列和串81

3.1栈81

3.1.1栈的逻辑结构81

3.1.2栈的顺序存储结构及实现83

3.1.3栈的链接存储结构及实现88

3.1.4顺序栈和链栈的比较89

3.2队列90

3.2.1队列的逻辑结构90

3.2.2队列的顺序存储结构及实现91

3.2.3队列的链接存储结构及实现94

3.2.4循环队列和链队列的比较97

3.3串97

3.3.1串的逻辑结构97

3.3.2串的存储结构99

3.3.3模式匹配100

3.4应用举例104

3.4.1栈的应用举例——递归104

3.4.2队列的应用举例——火车车厢重排107

3.4.3串的应用举例——恺撒密码109

3.4.4高校实验任务安排问题110

习题3111

思考题3113

第4章广义线性表——多维数组和广义表115

4.1多维数组115

4.1.1数组的定义115

4.1.2数组的存储结构与寻址117

4.2矩阵的压缩存储118

4.2.1特殊矩阵的压缩存储119

4.2.2稀疏矩阵的压缩存储121

4.3广义表127

4.3.1广义表的逻辑结构127

4.3.2广义表的存储结构及实现129

4.4应用举例132

4.4.1数组的应用举例——魔方阵132

4.4.2本科生选导师问题134

习题4135

思考题4137

第5章树和二叉树139

5.1树的逻辑结构139

5.1.1树的定义和基本术语139

5.1.2树的抽象数据类型定义142

5.1.3树的遍历操作143

5.2树的存储结构144

5.2.1双亲表示法144

5.2.2孩子表示法145

5.2.3双亲孩子表示法147

5.2.4孩子兄弟表示法147

5.3二叉树的逻辑结构148

5.3.1二叉树的定义148

5.3.2二叉树的基本性质150

5.3.3二叉树的抽象数据类型定义153

5.3.4二叉树的遍历操作154

5.4二叉树的存储结构及实现156

5.4.1顺序存储结构156

5.4.2二叉链表157

5.4.3三叉链表166

5.4.4线索链表167

5.5树、森林与二叉树的转换171

5.6应用举例175

5.6.1二叉树的应用举例——哈夫曼树及哈夫曼编码175

5.6.2树的应用举例——8枚硬币问题179

5.6.3高校学生会组织机构的管理180

习题5182

思考题5184

第6章图185

6.1图的逻辑结构185

6.1.1图的定义和基本术语185

6.1.2图的抽象数据类型定义189

6.1.3图的遍历操作191

6.2图的存储结构及实现194

6.2.1邻接矩阵194

6.2.2邻接表197

6.2.3十字链表202

6.2.4邻接多重表202

6.2.5边集数组203

6.2.6图的存储结构的比较204

6.3图的连通性205

6.3.1无向图的连通性205

6.3.2有向图的连通性205

6.3.3生成树和生成森林206

6.4应用举例206

6.4.1最小生成树206

6.4.2最短路径211

6.4.3AOV网与拓扑排序216

6.4.4AOE网与关键路径220

6.4.5校园最短路径问题223

习题6224

思考题6227

第7章查找技术229

7.1概述229

7.1.1查找的基本概念229

7.1.2查找算法的性能230

7.2线性表的查找技术231

7.2.1顺序查找231

7.2.2折半查找233

7.2.3斐波那契查找236

7.2.4插值查找237

7.3树表的查找技术238

7.3.1二叉排序树238

7.3.2平衡二叉树245

7.4散列表的查找技术249

7.4.1概述249

7.4.2散列函数的设计251

7.4.3处理冲突的方法253

7.4.4散列查找的性能分析257

7.4.5开散列表与闭散列表的比较258

习题7260

思考题7262

第8章排序技术263

8.1概述263

8.1.1排序的基本概念263

8.1.2排序算法的性能265

8.2插入排序265

8.2.1直接插入排序265

8.2.2希尔排序268

8.3交换排序270

8.3.1起泡排序270

8.3.2快速排序272

8.4选择排序277

8.4.1简单选择排序277

8.4.2堆排序279

8.5归并排序284

8.5.1二路归并排序的非递归实现284

8.5.2二路归并排序的递归实现288

8.6各种排序方法的比较289

习题8292

思考题8294

第9章索引技术297

9.1索引的基本概念297

9.2线性索引技术298

9.2.1稠密索引298

9.2.2分块索引299

9.2.3多重表300

9.2.4倒排表300

9.3树形索引301

9.3.123树302

9.3.2B-树304

9.3.3B+树308

习题9311

参考文献313