《数据结构(C++语言版) 第2版》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:邓俊辉编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2012
  • ISBN:9787302296522
  • 页数:412 页
图书介绍:本书按照面向对象程序设计的思想,根据作者多年的教学积累,系统介绍各类数据结构的功能、表示和实现,对比各类数据结构适用的应用环境;结合实际问题展示算法设计的一般性模式与方法,算法实现的主流技巧,以及算法效率的评判依据和分析方法;以高度概括的体例为线索贯穿全书,并通过对比和类比揭示数据结构与算法的内在联系,帮助读者形成整体性认识。

第1章 绪论 1

1.1计算机与算法 2

1.1.1古埃及人的绳索 2

1.1.2欧几里得的尺规 3

1.1.3起泡排序 4

1.1.4算法 5

1.1.5算法效率 7

1.2复杂度度量 8

1.2.1时间复杂度 8

1.2.2渐进复杂度 9

1.2.3空间复杂度 11

1.3复杂度分析 11

1.3.1常数σ(1) 12

1.3.2对数σ(logn) 12

1.3.3线性σ(n) 13

1.3.4多项式σ(polynomial(n)) 14

1.3.5指数σ(2 n) 14

1.3.6复杂度层次 15

1.3.7输入规模 16

1.4递归 16

1.4.1线性递归 17

1.4.2递归分析 17

1.4.3递归模式 19

1.4.4递归消除 22

1.4.5二分递归 23

1.5抽象数据类型 26

习题 26

第2章 向量 31

2.1从数组到向量 32

2.1.1数组 32

2.1.2向量 33

2.2接口 33

2.2.1 ADT接口 33

2.2.2操作实例 34

2.2.3 Vector模板类 34

2.3构造与析构 36

2.3.1默认构造方法 36

2.3.2基于复制的构造方法 36

2.3.3析构方法 37

2.4动态空间管理 37

2.4.1静态空间管理 37

2.4.2可扩充向量 38

2.4.3扩容 38

2.4.4分摊分析 39

2.4.5缩容 40

2.5常规向量 41

2.5.1直接引用元素 41

2.5.2置乱器 41

2.5.3判等器与比较器 42

2.5.4无序查找 43

2.5.5插入 44

2.5.6删除 45

2.5.7唯一化 46

2.5.8遍历 47

2.6有序向量 48

2.6.1比较器 48

2.6.2有序性甄别 49

2.6.3唯一化 49

2.6.4查找 51

2.6.5二分查找(版本A) 52

2.6.6 Fibonacci查找 55

2.6.7二分查找(版本B) 58

2.6.8二分查找(版本C) 59

2.7排序与下界 60

2.7.1有序性 60

2.7.2排序及其分类 60

2.7.3下界 61

2.7.4比较树 62

2.7.5估计下界 62

2.8排序器 63

2.8.1统一入口 63

2.8.2起泡排序 64

2.8.3归并排序 65

习题 68

第3章 列表 73

3.1从向量到列表 74

3.1.1从静态存储到动态存储 74

3.1.2由秩到位置 75

3.1.3列表 75

3.2接口 75

3.2.1列表节点 75

3.2.2列表 76

3.3列表 79

3.3.1头、尾节点 79

3.3.2默认构造方法 79

3.3.3由秩到位置的转换 80

3.3.4查找 80

3.3.5插入 80

3.3.6基于复制的构造 82

3.3.7删除 83

3.3.8析构 84

3.3.9唯一化 84

3.3.10遍历 85

3.4有序列表 85

3.4.1唯一化 85

3.4.2查找 86

3.5排序器 86

3.5.1统一入口 86

3.5.2插入排序 87

3.5.3选择排序 88

3.5.4归并排序 89

习题 91

第4章 栈与队列 93

4.1栈 94

4.1.1 ADT接口 94

4.1.2操作实例 95

4.1.3 Stack模板类 95

4.2栈与递归 96

4.2.1递归的实现 96

4.2.2避免递归 98

4.3典型应用 99

4.3.1逆序输出 99

4.3.2递归嵌套 100

4.3.3延迟缓冲 103

4.3.4逆波兰表达式 107

4.4试探回溯法 110

4.4.1试探与回溯 110

4.4.2八皇后 111

4.4.3迷宫寻径 113

4.5队列 116

4.5.1概述 116

4.5.2 ADT接口 116

4.5.3操作实例 117

4.5.4 Queue模板类 117

4.6队列应用 117

4.6.1循环分配器 117

4.6.2银行服务模拟 118

习题 119

第5章 二叉树 123

5.1二叉树及其表示 124

5.1.1树 124

5.1.2二叉树 125

5.1.3多叉树 126

5.2编码树 128

5.2.1二进制编码 128

5.2.2二叉编码树 130

5.3二叉树的实现 131

5.3.1二叉树节点 131

5.3.2二叉树节点操作接口 133

5.3.3二叉树 134

5.4Huffman编码 138

5.4.1 PFC编码及解码 138

5.4.2最优编码树 141

5.4.3 Huff man编码树 143

5.4.4 Huffman编码算法 145

5.5遍历 151

5.5.1递归式遍历 151

5.5.2迭代版先序遍历 153

5.5.3迭代版中序遍历 155

5.5.4迭代版后序遍历 159

5.5.5层次遍历 161

习题 162

第6章 图 165

6.1概述 166

6.2抽象数据类型 169

6.2.1操作接口 169

6.2.2 Graph模板类 169

6.3邻接矩阵 171

6.3.1原理 171

6.3.2实现 171

6.3.3时间性能 173

6.3.4空间性能 173

6.4邻接表 174

6.4.1原理 174

6.4.2复杂度 174

6.5图遍历算法概述 175

6.6广度优先搜索 175

6.6.1策略 175

6.6.2实现 176

6.6.3实例 177

6.6.4复杂度 177

6.6.5应用 177

6.7深度优先搜索 178

6.7.1策略 178

6.7.2实现 178

6.7.3实例 179

6.7.4复杂度 181

6.7.5应用 181

6.8拓扑排序 181

6.8.1应用 181

6.8.2有向无环图 182

6.8.3算法 182

6.8.4实现 183

6.8.5实例 184

6.8.6复杂度 184

6.9双连通域分解 184

6.9.1关节点与双连通域 184

6.9.2蛮力算法 185

6.9.3算法 185

6.9.4实现 186

6.9.5实例 187

6.9.6复杂度 188

6.10优先级搜索 188

6.10.1优先级与优先级数 188

6.10.2基本框架 189

6.10.3复杂度 189

6.11最小支撑树 190

6.11.1支撑树 190

6.11.2最小支撑树 190

6.11.3歧义性 190

6.11.4蛮力算法 191

6.11.5 Prim算法 191

6.12最短路径 193

6.12.1最短路径树 193

6.12.2歧义性 194

6.12.3 Dijkstra算法 194

习题 196

第7章 搜索树 199

7.1查找 201

7.1.1循关键码访问 201

7.1.2词条 201

7.1.3序与比较器 201

7.2二叉搜索树 202

7.2.1顺序性 202

7.2.2中序遍历序列 202

7.2.3 BST模板类 203

7.2.4查找算法及其实现 203

7.2.5插入算法及其实现 205

7.2.6删除算法及其实现 206

7.3平衡二叉搜索树 208

7.3.1树高与性能 208

7.3.2理想平衡与适度平衡 209

7.3.3等价二叉搜索树 210

7.3.4等价变换与局部调整 210

7.4 AVL树 211

7.4.1定义及性质 211

7.4.2节点插入 213

7.4.3节点删除 215

7.4.4统一重平衡算法 217

习题 219

第8章 高级搜索树 221

8.1伸展树 222

8.1.1局部性 222

8.1.2逐层伸展 223

8.1.3双层伸展 224

8.1.4分摊分析 226

8.1.5伸展树的实现 228

8.2 B-树 232

8.2.1多路平衡查找 232

8.2.2 ADT接口及其实现 235

8.2.3关键码查找 236

8.2.4性能分析 238

8.2.5关键码插入 239

8.2.6上溢与分裂 239

8.2.7关键码删除 242

8.2.8下溢与合并 243

8.3红黑树 247

8.3.1概述 248

8.3.2红黑树接口定义 250

8.3.3节点插入算法 251

8.3.4节点删除算法 254

8.4 kd-树 259

8.4.1范围查询 259

8.4.2 kd-树 262

8.4.3基于2d-树的范围查询 263

习题 265

第9章 词典 269

9.1词典ADT 271

9.1.1操作接口 271

9.1.2操作实例 271

9.1.3接口定义 272

9.1.4实现方法 272

9.2跳转表 273

9.2.1 Skiplist模板类 273

9.2.2总体逻辑结构 274

9.2.3四联表 274

9.2.4查找 276

9.2.5空间复杂度 277

9.2.6时间复杂度 278

9.2.7插入 279

9.2.8删除 282

9.3散列表 283

9.3.1完美散列 283

9.3.2装填因子与空间利用率 284

9.3.3散列函数 285

9.3.4散列表 289

9.3.5冲突及其排解 290

9.3.6闭散列策略 292

9.3.7查找与删除 295

9.3.8插入 296

9.3.9更多闭散列策略 297

9.3.10散列码转换 299

9.4散列应用 301

9.4.1桶排序 301

9.4.2最大间隙 302

9.4.3基数排序 303

习题 304

第10章 优先级队列 309

10.1优先级队列ADT 310

10.1.1优先级与优先级队列 310

10.1.2关键码、比较器与偏序关系 311

10.1.3操作接口 311

10.1.4操作实例:选择排序 311

10.1.5接口定义 312

10.1.6应用实例:Huffman编码树 312

10.2堆 314

10.2.1完全二叉堆 314

10.2.2元素插入 317

10.2.3元素删除 319

10.2.4建堆 321

10.2.5就地堆排序 323

10.3左式堆 325

10.3.1堆合并 325

10.3.2单侧倾斜 326

10.3.3 PQ_LeftHeap模板类 326

10.3.4空节点路径长度 327

10.3.5左倾性与左式堆 327

10.3.6右侧链 328

10.3.7合并算法 328

10.3.8实例 328

10.3.9合并操作merge()的实现 329

10.3.10复杂度 330

10.3.11基于合并的插入和删除 330

习题 331

第11章 串 335

11.1串及串匹配 336

11.1.1串 336

11.1.2串匹配 337

11.1.3测评标准与策略 338

11.2蛮力算法 339

11.2.1算法描述 339

11.2.2算法实现 339

11.2.3时间复杂度 340

11.3 KMP算法 341

11.3.1构思 341

11.3.2 next表 342

11.3.3 KMP算法 342

11.3.4 next[0]=-1 343

11.3.5 next[j+1] 343

11.3.6构造next表 344

11.3.7性能分析 344

11.3.8继续改进 345

11.4 BM算法 347

11.4.1思路与框架 347

11.4.2坏字符策略 348

11.4.3好后缀策略 351

11.4.4 GS[]表构造算法 353

11.4.5算法纵览 356

11.5 Karp-Rabin算法 357

11.5.1构思 357

11.5.2算法与实现 357

习题 361

第12章 排序 363

12.1快速排序 364

12.1.1分治策略 364

12.1.2轴点 364

12.1.3快速排序算法 365

12.1.4快速划分算法 365

12.1.5复杂度 368

12.1.6应对退化 369

12.2选取与中位数 371

12.2.1概述 371

12.2.2主流数 372

12.2.3归并向量的中位数 373

12.2.4基于优先级队列的选取 376

12.2.5基于快速划分的选取 377

12.2.6 k-选取算法 378

12.3希尔排序 380

12.3.1递减增量策略 380

12.3.2增量序列 382

习题 385

附录 387

参考文献 388

插图索引 391

表格索引 398

算法索引 399

代码索引 400

关键词索引 406