《数据结构与算法》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:许卓群等编著
  • 出 版 社:北京:高等教育出版社
  • 出版年份:2004
  • ISBN:7040146169
  • 页数:469 页
图书介绍:本书把数据结构的原理和算法分析技术有机地结合在一起,系统地介绍了各种类型的数据结构和排序、检索的各种算法。还引入了一些比较高级的数据结构及相关的算法分析技术。本书分为基本数据结构、排序和检索、高级数据结构等三个部分。

第1章 概论 1

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

1.2 什么是数据结构 1

1.2.1 数据的逻辑结构 1

1.2.2 数据的存储结构 4

1.3 抽象数据类型 7

1.4 算法及其特性 10

1.4.1 算法 10

1.4.2 计算复杂性和算法的效率 11

1.5 算法的执行效率及其度量 12

1.5.1 算法的渐进分析 12

1.5.2 最坏、最好和平均情况 14

1.5.3 时间和空间资源开销 15

1.5.4 大Θ表示法及其分析规则 15

1.6 数据结构的选择和评价 16

习题 17

第2章 线性表、栈和队列 18

2.1 线性表 19

2.1.1 线性表的抽象数据类型 19

2.1.2 线性表的存储结构 21

2.1.3 线性表运算分类 21

2.2 顺序表——向量 22

2.2.1 向量的类定义 22

2.2.2 向量的运算 23

2.3.1 单链表 25

2.3 链表 25

2.3.2 双链表 29

2.3.3 循环链表 31

2.4 线性表实现方法的比较 31

2.5 栈 32

2.5.1 顺序栈 33

2.5.2 链式栈 35

2.5.3 栈的应用——计算表达式的值 36

2.5.4 栈与递归 41

2.6 队列 48

2.6.1 顺序队列 50

2.6.2 链式队列 53

习题 54

2.6.3 顺序队列与链式队列的比较 54

第3章 字符串 56

3.1 字符串抽象数据类型 56

3.1.1 基本概念 56

3.1.2 String抽象数据类型 61

3.2 字符串的存储结构和类定义 66

3.2.1 字符串的顺序存储 67

3.2.2 字符串类class String的存储结构 67

3.3 字符串运算的算法实现 70

3.3.1 C++标准串运算的实现 70

3.3.2 String串运算的实现 73

3.4 字符串的模式匹配 76

3.4.1 模式匹配原始算法 77

3.4.2 字符串的特征向量N 80

3.4.3 KMP模式匹配算法 82

习题 83

上机题 84

第4章 二叉树 85

4.1 二叉树的概念 85

4.1.1 二叉树的定义及相关概念 85

4.1.2 满二叉树、完全二叉树和扩充二叉树 86

4.2 二叉树的主要性质 88

4.3 二叉树的抽象数据类型 89

4.4 周游二叉树 91

4.4.1 深度优先周游二叉树 91

4.4.2 广度优先周游二叉树 97

4.5.1 用指针实现二叉树 98

4.5 二叉树的实现 98

4.5.2 空间开销 101

4.5.3 用数组实现完全二叉树 102

4.5.4 穿线二叉树 103

4.6 二叉搜索树 111

4.7 堆与优先队列 116

4.8 Huffman编码树 123

4.8.1 建立Huffman编码树 123

4.8.2 Huffman编码及其用法 126

习题 128

上机题 130

5.1 树的概念 131

5.1.1 树和森林 131

第5章 树 131

5.1.2 森林与二叉树的等价转换 133

5.1.3 树的抽象数据类型 135

5.1.4 树的周游 136

5.2 树的链式存储 139

5.2.1 子结点表表示法 139

5.2.2 左子结点/右兄弟结点表示法 140

5.2.3 动态结点表示法 141

5.2.4 动态“左子结点/右兄弟结点”二叉链表表示法 143

5.2.5 父指针表示法及等价类的并查算法 148

5.3 树的顺序存储 155

5.3.1 带右链的先根次序表示法 155

5.3.2 带双标记位的先根次序表示法 156

5.3.3 带左链的层次次序表示法 158

5.3.4 带度数的后根次序表示法 160

5.4 K叉树 161

习题 161

上机题 163

第6章 图 165

6.1 图的基本概念 165

6.2 图的抽象数据类型 168

6.3 图的存储结构 169

6.3.1 图的相邻矩阵表示法 169

6.3.2 图的邻接表表示法 174

6.4 图的周游 180

6.4.1 深度优先搜索 181

6.4.2 广度优先搜索 182

6.4.3 拓扑排序 183

6.5 最短路径问题 187

6.5.1 单源最短路径 187

6.5.2 每对顶点间的最短路径 191

6.6 最小支撑树 193

6.6.1 Prim算法 194

6.6.2 Kruskal算法 196

习题 198

上机题 201

第7章 内排序 203

7.1 排序问题的基本概念 203

7.2 三种O(n2)的简单排序算法 206

7.2.1 插入排序 206

7.2.2 冒泡排序 211

7.2.3 直接选择排序 213

7.2.4 简单排序算法的时间代价对比 215

7.3 Shell排序 217

7.4 基于分治法的排序 219

7.4.1 快速排序 220

7.4.2 归并排序 227

7.5 堆排序 231

7.6 分配排序和基数排序 233

7.6.1 桶式排序 233

7.6.2 基数排序 235

7.7 各种排序算法的理论和实验时间代价 244

7.8 排序问题的下限 246

习题 249

上机题 253

第8章 文件管理和外排序 254

8.1 主存储器和外存储器 254

8.2 外存储器 256

8.2.1 磁盘 256

8.2.2 磁盘访问时间估算 260

8.2.3 磁带 262

8.3 外存文件的组织 264

8.3.1 文件组织 265

8.3.2 C++的流文件 267

8.4 缓冲区和缓冲池 268

8.5 外排序 271

8.5.1 置换选择排序 272

8.5.2 二路外排序 277

8.5.3 多路归并——选择树 279

习题 291

上机题 293

第9章 检索 294

9.1 基于线性表的检索 295

9.1.1 顺序检索 296

9.1.2 二分检索 297

9.1.3 分块检索 302

9.2 集合的检索 303

9.2.1 集合的数学特性 304

9.2.2 计算机中的集合 304

9.3 散列方法 306

9.3.1 散列函数 308

9.3.2 开散列方法(拉链法) 312

9.3.3 闭散列方法(开地址法) 315

9.3.4 闭散列表的算法 319

9.3.5 散列方法的效率分析 324

习题 326

上机题 331

第10章 索引技术 333

10.1 线性索引 334

10.2 静态索引 335

10.2.1 多分树 335

10.2.2 ISAM-索引顺序存取方法 336

10.3 倒排索引 338

10.3.1 基于属性的倒排 339

10.3.2 对正文文件的倒排 341

10.4 动态索引 343

10.4.1 B树 343

10.4.2 B+树 349

10.4.3 VSAM 351

10.4.4 B树的性能分析 355

10.5 动态索引和静态索引性能的比较 356

习题 356

上机题 358

第11章 高级线性结构 359

11.1 多维数组 359

11.1.1 特殊矩阵 364

11.1.2 稀疏矩阵 366

11.2 广义表 372

11.2.1 广义表的存储结构 374

11.2.2 广义表的周游算法 378

11.3 存储管理技术 380

11.3.1 可利用空间表 381

11.3.2 存储的动态分配和回收 385

11.3.3 伙伴系统 388

11.3.4 失败处理策略和无用单元回收 389

习题 393

上机题 393

第12章 高级树结构 395

12.1 Trie结构和Patricia树 395

12.2 改进的二叉搜索树 399

12.2.1 最佳二叉搜索树 400

12.2.2 平衡的二叉搜索树 409

12.2.3 伸展树 425

12.3 空间树结构 428

12.3.1 k-d树 429

12.3.2 PR四分树 432

12.3.3 R*树 434

12.4 树形结构的应用 437

12.4.1 决策树 437

12.4.2 博弈树 445

习题 457

上机题 461

参考文献 469