图书目录

目录

第1章数据结构概论1

1.1数据结构的概念1

1.1.1数据结构举例1

1.1.2数据与数据结构2

1.1.3数据结构的分类3

1.1.4“数据结构”课程的内容4

1.2数据结构的抽象形式6

1.2.1数据类型6

1.2.2数据抽象与抽象数据类型7

1.3作为ADT的C++类9

1.3.1面向对象的概念9

1.3.2C++中的类10

1.3.3C++中的对象12

1.3.4C++的输入输出13

1.3.5C++中的函数14

1.3.6动态存储分配17

1.3.7C++中的继承18

1.3.8多态性19

1.3.9C++的模板23

1.4算法定义24

1.5算法性能分析与度量25

1.5.1算法的性能标准26

1.5.2算法复杂性度量26

1.5.3算法的渐进分析31

1.5.4最坏、最好和平均情况35

习题36

第2章线性表40

2.1线性表的概念40

2.1.1线性表的定义40

2.1.2线性表的类定义41

2.2顺序表42

2.2.1顺序表的定义和特点42

2.2.2顺序表的类定义及其操作42

2.2.3顺序表的性能分析47

2.2.4顺序表的应用49

2.3单链表49

2.3.1单链表的概念50

2.3.2单链表的类定义51

2.3.3单链表中的插入与删除52

2.3.4带附加头结点的单链表54

2.3.5单链表的模板类56

2.4线性链表的其他变形62

2.4.1循环单链表62

2.4.2双向链表65

2.5单链表的应用: 多项式及其运算69

2.5.1多项式的表示69

2.5.2多项式的类定义71

2.5.3多项式的加法73

2.6静态链表74

习题75

第3章栈和队列81

3.1栈81

3.1.1栈的定义81

3.1.2顺序栈82

3.1.3链式栈85

3.1.4栈的应用之一——括号匹配87

3.1.5栈的应用之二——表达式的计算88

3.2栈与递归93

3.2.1递归的概念93

3.2.2递归过程与递归工作栈97

3.2.3用回溯法求解迷宫问题102

3.3队列105

3.3.1队列的概念105

3.3.2循环队列106

3.3.3链式队列109

3.3.4队列应用举例: 打印二项展开式 (a+b)i的系数111

3.4优先级队列113

3.4.1优先级队列的概念113

3.4.2优先级队列的存储表示和实现114

3.5双端队列115

3.5.1双端队列的概念116

3.5.2双端队列的数组表示117

习题119

第4章数组、串与广义表125

4.1多维数组的概念与存储125

4.1.1多维数组的概念125

4.1.2多维数组的存储表示126

4.2特殊矩阵128

4.2.1对称矩阵的压缩存储128

4.2.2三对角/多对角矩阵的压缩存储130

4.3稀疏矩阵131

4.3.1稀疏矩阵及其三元组数组表示131

4.3.2稀疏矩阵的转置134

4.3.3稀疏矩阵的相加137

4.3.4矩阵的十字链表表示139

4.4字符串140

4.4.1字符串的概念140

4.4.2C++有关字符串的库函数141

4.4.3字符串的实现143

4.4.4字符串的自定义类145

4.4.5字符串操作的实现146

4.4.6字符串的模式匹配148

4.4.7字符串的存储方法154

4.5广义表156

4.5.1广义表的定义与性质156

4.5.2广义表的表示157

4.5.3广义表存储结构的实现158

4.5.4广义表的递归算法161

习题168

第5章树174

5.1树的基本概念174

5.1.1树的定义和术语174

5.1.2树的抽象数据类型176

5.2二叉树177

5.2.1二叉树的定义177

5.2.2二叉树的性质178

5.2.3二叉树的抽象数据类型179

5.3二叉树的存储表示180

5.3.1二叉树的数组存储表示180

5.3.2二叉树的链接存储表示181

5.4二叉树遍历及其应用186

5.4.1二叉树遍历的递归算法186

5.4.2二叉树遍历的应用188

5.4.3二叉树遍历的非递归算法190

5.4.4二叉树的计数194

5.5线索二叉树197

5.5.1线索198

5.5.2中序线索二叉树的建立和遍历198

5.5.3前序与后序的线索化二叉树204

5.6树与森林205

5.6.1树的存储表示205

5.6.2树、森林与二叉树的转换211

5.7树与森林的遍历及其应用212

5.7.1树与森林的深度优先遍历213

5.7.2树和森林的广度优先遍历215

5.7.3树遍历算法的应用216

5.8堆217

5.8.1最小堆和最大堆217

5.8.2堆的建立219

5.8.3堆的插入与删除220

5.9Huffman树及其应用222

5.9.1路径长度222

5.9.2Huffman树223

5.9.3Huffman树的应用: 最优判定树226

5.9.4Huffman树的应用: Huffman编码227

习题229

第6章集合与字典237

6.1集合及其表示237

6.1.1集合的基本概念237

6.1.2用位向量实现集合抽象数据类型238

6.1.3用有序链表实现集合的抽象数据类型243

6.2并查集与等价类248

6.2.1并查集的定义及其实现248

6.2.2并查集的应用: 等价类划分252

6.3字典254

6.3.1字典的概念254

6.3.2字典的线性表描述256

6.4跳表258

6.4.1跳表的概念258

6.4.2跳表的搜索、插入和删除259

6.5散列260

6.5.1散列表与散列方法261

6.5.2散列函数261

6.5.3处理冲突的闭散列方法263

6.5.4处理冲突的开散列方法272

6.5.5散列表分析274

习题276

第7章搜索结构282

7.1静态搜索结构283

7.1.1静态搜索表283

7.1.2顺序搜索285

7.1.3基于有序顺序表的顺序搜索和折半搜索286

7.1.4基于有序顺序表的其他搜索方法291

7.2二叉搜索树293

7.2.1二叉搜索树的概念293

7.2.2二叉搜索树上的搜索295

7.2.3二叉搜索树的插入295

7.2.4二叉搜索树的删除297

7.2.5二叉搜索树的性能分析298

7.3AVL树301

7.3.1AVL树的概念301

7.3.2平衡化旋转302

7.3.3AVL树的插入306

7.3.4AVL树的删除309

7.3.5AVL树的性能分析314

7.4伸展树315

7.5红黑树318

7.5.1红黑树的概念和性质318

7.5.2红黑树的搜索319

7.5.3红黑树的插入319

7.5.4红黑树的删除320

习题323

第8章图330

8.1图的基本概念330

8.1.1与图有关的若干概念330

8.1.2图的抽象数据类型332

8.2图的存储结构333

8.2.1图的邻接矩阵表示334

8.2.2图的邻接表表示339

8.2.3图的邻接多重表表示345

8.3图的遍历347

8.3.1深度优先搜索348

8.3.2广度优先搜索349

8.3.3连通分量350

8.3.4重连通分量352

8.4最小生成树354

8.4.1Kruskal算法355

8.4.2Prim算法358

8.5最短路径360

8.5.1非负权值的单源最短路径360

8.5.2任意权值的单源最短路径363

8.5.3所有顶点之间的最短路径366

8.6用顶点表示活动的网络(AOV网络)368

8.7用边表示活动的网络(AOE网络)372

习题377

第9章排序384

9.1排序的概念及其算法性能分析384

9.1.1排序的概念384

9.1.2排序算法的性能评估385

9.1.3排序表的类定义387

9.2插入排序388

9.2.1直接插入排序388

9.2.2折半插入排序389

9.2.3希尔排序391

9.3快速排序392

9.3.1快速排序的过程392

9.3.2快速排序的性能分析394

9.3.3快速排序的改进算法395

9.3.4三路划分的快速排序算法398

9.4选择排序400

9.4.1直接选择排序400

9.4.2锦标赛排序401

9.4.3堆排序406

9.5归并排序409

9.5.1归并409

9.5.2归并排序算法410

9.6基于链表的排序算法411

9.6.1链表插入排序412

9.6.2链表归并排序414

9.6.3链表排序结果的重排415

9.7分配排序418

9.7.1桶式排序418

9.7.2基数排序419

9.7.3MSD基数排序420

9.7.4LSD基数排序422

9.8内部排序算法的分析424

9.8.1排序方法的下界424

9.8.2各种内部排序方法的比较426

习题427

第10章文件、外部排序与搜索435

10.1主存储器和外存储器435

10.1.1磁带435

10.1.2磁盘存储器437

10.1.3缓冲区与缓冲池439

10.2文件组织441

10.2.1文件的概念441

10.2.2文件的存储结构442

10.3外排序451

10.3.1外排序的基本过程451

10.3.2k路平衡归并与败者树453

10.3.3初始归并段的生成458

10.3.4并行操作的缓冲区处理462

10.3.5最佳归并树465

10.4多级索引结构467

10.4.1静态的ISAM方法467

10.4.2动态的m路搜索树468

10.4.3B树470

10.4.4B树的插入472

10.4.5B树的删除474

10.4.6B+树478

10.4.7VSAM481

10.5字典树482

10.5.1字典树的概念482

10.5.2双链树表示483

10.5.3Trie树484

习题486

附录A部分习题答案495

参考文献501