首页 > 图书中心 > 数据结构(C语言版)(第3版)

目录

目录

第1章绪论1

1.1数据结构的概念及分类1

1.1.1为什么要学习数据结构1

1.1.2与数据结构相关的基本术语2

1.1.3数据结构的分类5

1.1.4数据结构的存储结构7

1.1.5定义在数据结构上的操作8

1.1.6“好”数据结构8

1.2使用C语言描述数据结构8

1.2.1C的数据类型9

1.2.2算法的控制结构10

1.2.3算法的函数结构11

1.2.4动态存储分配14

1.2.5逻辑和关系运算的约定15

1.2.6输入与输出15

1.3算法和算法设计16

1.3.1算法的定义和特性16

1.3.2算法的设计步骤17

1.3.3算法设计的基本方法18

1.4算法分析与度量21

1.4.1算法的评价标准22

1.4.2算法的时间和空间复杂性度量22

1.4.3算法的渐进分析25

本章小结28

习题28

第2章线性表32

2.1线性表32

2.1.1线性表的定义和特点32

2.1.2线性表的主要操作33

2.2顺序表34

2.2.1顺序表的定义和特点34

2.2.2顺序表的结构定义35

2.2.3顺序表主要操作的实现36

2.2.4顺序表主要操作的性能分析39

2.2.5顺序表的应用举例41

2.3单链表42

2.3.1单链表的定义和特点42

2.3.2单链表的结构定义43

2.3.3单链表中指针的操作43

2.3.4单链表中的插入与删除43

2.3.5带头结点的单链表47

2.3.6单链表主要操作的性能分析48

2.3.7单链表的顺序访问与尾递归49

2.3.8单链表的应用——用有序链表表示集合52

2.4顺序表与线性链表的比较55

2.5线性链表的其他变形57

2.5.1循环链表57

2.5.2双向链表61

2.5.3静态链表65

2.6线性表的应用: 一元多项式及其运算65

2.6.1一元多项式的表示66

2.6.2多项式的结构定义与建立67

2.6.3多项式的加法69

2.6.4多项式的乘法70

本章小结71

习题72

〖2〗〖2〗第3章栈和队列78

3.1栈78

3.1.1栈的概念78

3.1.2顺序栈79

3.1.3链式栈85

3.1.4栈的混洗87

3.2队列90

3.2.1队列的概念90

3.2.2循环队列91

3.2.3双循环队列95

3.2.4链式队列96

3.3栈的应用99

3.3.1数制转换99

3.3.2括号匹配100

3.3.3表达式的计算与优先级处理101

3.3.4栈与递归的实现105

3.4队列的应用108

3.4.1打印杨辉三角形与逐行处理108

3.4.2电路布线与两点间的最短路径110

3.5在算法设计中使用递归113

3.5.1汉诺塔问题与分治法113

3.5.2排列组合与减治法116

3.5.3迷宫问题与回溯法118

3.5.4计算组合数与动态规划123

3.6双端队列125

3.6.1双端队列的概念125

3.6.2输入受限的双端队列125

3.6.3输出受限的双端队列126

3.6.4双端队列的顺序存储表示127

3.6.5双端队列的链接存储表示128

本章小结130

习题130

第4章数组、串和广义表136

4.1数组136

4.1.1一维数组136

4.1.2多维数组138

4.1.3数组的应用举例140

4.2特殊矩阵的压缩存储141

4.2.1对称矩阵的压缩存储142

4.2.2三对角矩阵的压缩存储144

4.3稀疏矩阵145

4.3.1稀疏矩阵的概念145

4.3.2稀疏矩阵的三元组表表示146

4.3.3稀疏矩阵的十字链表表示151

4.4字符串152

4.4.1字符串的概念153

4.4.2字符串的初始化和赋值153

4.4.3C语言中有关字符串的库函数154

4.4.4自定义字符串的存储表示156

4.4.5串的模式匹配161

4.4.6字符串的应用实例166

4.5广义表170

4.5.1广义表的概念170

4.5.2广义表的性质171

4.5.3广义表的链接表示171

4.5.4三元多项式的表示174

本章小结176

习题177

第5章树与二叉树182

5.1树的基本概念182

5.1.1树的定义和术语182

5.1.2树的基本操作185

5.2二叉树186

5.2.1二叉树的概念186

5.2.2二叉树的性质187

5.2.3二叉树的主要操作189

5.3二叉树的存储表示190

5.3.1二叉树的顺序存储表示190

5.3.2二叉树的链表存储表示195

5.4二叉树的遍历199

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

5.4.2递归遍历算法的应用举例200

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

5.4.4层次序遍历算法的应用举例208

5.4.5二叉树的计数212

5.5线索二叉树215

5.5.1线索二叉树的概念215

5.5.2线索二叉树的种类216

5.5.3中序线索二叉树的建立和遍历217

5.5.4前序与后序线索二叉树222

5.6树与森林223

5.6.1树的双亲表示223

5.6.2树的子女链表表示227

5.6.3子女兄弟链表表示230

5.6.4森林与二叉树的转换232

5.6.5树与森林的深度优先遍历234

5.6.6树与森林的广度优先遍历236

5.6.7树遍历算法的应用举例238

本章小结239

习题240

第6章树与二叉树的应用245

6.1二叉查找树245

6.1.1二叉查找树的概念245

6.1.2二叉查找树的查找246

6.1.3二叉查找树的插入247

6.1.4二叉查找树的删除249

6.1.5二叉查找树的性能分析250

6.2中序线索二叉查找树253

6.2.1中序线索二叉查找树的构建253

6.2.2中序线索二叉查找树的插入254

6.2.3中序线索二叉查找树的删除256

6.2.4中序线索二叉查找树的范围查找257

6.3AVL树257

6.3.1AVL树的概念258

6.3.2平衡化旋转258

6.3.3AVL树的插入262

6.3.4AVL树的删除264

6.3.5AVL树的性能分析268

6.4Huffman树270

6.4.1带权路径长度的概念270

6.4.2Huffman树的概念270

6.4.3最优判定树274

6.4.4Huffman编码275

6.5堆280

6.5.1小根堆和大根堆280

6.5.2堆的建立281

6.5.3堆的插入283

6.5.4堆的删除284

6.6并查集285

6.6.1并查集的定义及其实现285

6.6.2并查集操作的分析和改进287

6.7八皇后问题与树的剪枝289

6.7.1八皇后问题的提出289

6.7.2八皇后问题的状态树290

6.7.3八皇后问题算法292

本章小结293

习题293

第7章图298

7.1图的基本概念298

7.1.1与图有关的若干概念298

7.1.2图的基本操作301

7.2图的存储结构303

7.2.1图的邻接矩阵表示303

7.2.2图的邻接表表示308

7.2.3邻接矩阵表示与邻接表表示的比较315

7.2.4图的邻接多重表表示315

7.3图的遍历317

7.3.1图遍历的概念317

7.3.2深度优先搜索318

7.3.3广度优先搜索319

7.3.4图中的路径与回路320

7.4图的连通性323

7.4.1无向图的连通分量323

7.4.2重连通图325

7.4.3有向图的强连通分量327

7.5最小生成树330

7.5.1最小生成树求解和贪婪法330

7.5.2Kruskal算法332

7.5.3Prim算法335

7.6最短路径337

7.6.1非负权值的单源最短路径337

7.6.2任意权值的单源最短路径341

7.6.3所有顶点之间的最短路径344

7.6.4无权值图的最短路径347

7.7活动网络348

7.7.1AOV网络与拓扑排序348

7.7.2AOE网络与关键路径法352

本章小结356

习题357

第8章查找363

8.1查找的基本概念363

8.1.1查找的概念363

8.1.2查找算法的性能分析364

8.2顺序查找法364

8.2.1在顺序表上的顺序查找算法364

8.2.2在线性链表上的顺序查找算法368

8.3折半查找法368

8.3.1折半查找法368

8.3.2重复元素序列上的折半查找371

8.3.3斐波那契查找: 折半查找的变形372

8.3.4插值查找: 折半查找的变形375

8.4最优二叉查找树376

8.4.1自下向上构造最优二叉查找树376

8.4.2自上向下构造近似最优二叉查找树380

8.5B树384

8.5.1索引顺序表与分块查找384

8.5.2多级索引结构与m叉查找树387

8.5.3B树的概念388

8.5.4B树上的查找390

8.5.5B树上的插入391

8.5.6B树上的删除393

8.5.7B+树397

8.6键树400

8.6.1键树的概念400

8.6.2双链树400

8.6.3Trie树405

8.7散列表及其查找406

8.7.1散列的概念406

8.7.2常见的散列函数407

8.7.3解决冲突的开地址法410

8.7.4解决冲突的链地址法418

8.7.5散列法分析422

本章小结424

习题424

第9章内排序432

9.1排序概述432

9.1.1排序的概念432

9.1.2排序算法的性能433

9.1.3数据表的结构定义434

9.2插入排序435

9.2.1直接插入排序436

9.2.2基于链表的直接插入排序437

9.2.3折半插入排序439

9.2.4希尔排序440

9.3交换排序442

9.3.1起泡排序442

9.3.2快速排序445

9.3.3快速排序的改进算法449

9.4选择排序452

9.4.1简单选择排序452

9.4.2堆排序454

9.4.3锦标赛排序457

9.5归并排序460

9.5.1二路归并排序的设计思路460

9.5.2二路归并排序的递归算法461

9.5.3基于链表的归并排序算法463

9.5.4迭代的归并排序算法464

9.5.5利用循环右移的二路归并算法466

9.6基数排序468

9.6.1基数排序概述469

9.6.2MSD基数排序469

9.6.3LSD基数排序472

9.7内排序算法的分析和比较475

9.7.1排序方法的下界475

9.7.2各种内排序方法的比较476

9.8时间复杂度小于O(nlog2n)的排序算法478

9.8.1计数排序算法478

9.8.2鸽巢排序算法479

9.9选择算法480

9.9.1在顺序表中查找值第k小的元素480

9.9.2在带头结点的单链表中查找倒数第k个结点481

9.9.3在带头结点的单链表中查找值为倒数第k的元素482

9.9.4不要求完全排序求前k个值最小的元素483

本章小结484

习题485

第10章外排序491

10.1主存储器和外存储器491

10.1.1磁带491

10.1.2磁盘存储器492

10.1.3缓冲区493

10.2基于磁盘的外排序过程494

10.2.1基于磁盘排序的过程494

10.2.2基于磁盘排序的性能分析495

10.3m路平衡归并496

10.3.1m路平衡归并的过程496

10.3.2用败者树选最小记录497

10.3.3败者树的构造498

10.3.4排序算法中的读写磁盘操作500

10.3.5使用败者树进行m路平衡归并排序的算法502

10.4初始归并段的生成504

10.4.1置换选择排序504

10.4.2用败者树实现置换选择排序505

10.4.3置换选择排序算法的实现505

10.4.4置换选择排序的性能分析508

10.5最佳归并树509

10.5.1归并树的构造509

10.5.2构造最佳归并树的算法510

10.5.3根据最佳归并树实现M路归并排序512

10.6并行操作的缓冲区处理514

10.6.1使用固定缓冲区实现并行操作514

10.6.2使用缓冲区队列实现并行操作515

10.7磁带归并排序517

10.7.1平衡归并排序517

10.7.2多步归并排序518

10.7.3多步归并排序初始归并段的分配518

本章小结519

习题520

附录清华大学本科生考试试题525

参考文献528

版权所有(C)2023 清华大学出版社有限公司 京ICP备10035462号 京公网安备11010802042911号

联系我们 | 网站地图 | 法律声明 | 友情链接 | 盗版举报 | 人才招聘