《数据结构 思想与实现》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:翁惠玉,俞勇编著
  • 出 版 社:北京:高等教育出版社
  • 出版年份:2009
  • ISBN:9787040277838
  • 页数:420 页
图书介绍:数据结构是计算机专业最基础,也是最重要的课程之一。它和程序设计一起为计算学科的其他后继课程的学习奠定了基础。

第1章 引言 1

1.1 算法与数据结构 1

1.1.1 数据的逻辑结构 2

1.1.2 数据结构的运算 3

1.2 存储实现 4

1.3算法分析 4

1.3.1 时间复杂度的概念 5

1.3.2 算法运算量的计算 6

1.3.3 渐进表示法 8

1.3.4 时间复杂度的计算 10

1.3.5 算法的优化 11

1.4 面向对象的方法 15

1.4.1 面向对象的概念 15

1.4.2 用面向对象的思想讨论数据结构 16

1.4.3 面向对象方法中数据结构的描述和实现 16

1.5 本书的结构和特点 17

1.6 本书采用的算法描述工具 17

1.7 总结 17

1.8 习题 18

第一部分 线性表 21

第2章 线性表 21

2.1 线性表的基本概念 21

2.2 线性表的顺序实现 22

2.2.1 顺序表的存储实现 22

2.2.2 基本运算在顺序表上的实现 23

2.2.3 顺序实现的算法分析 26

2.3 线性表的链接实现 26

2.3.1 单链表 27

2.3.2 双链表 31

2.3.3 循环链表 32

2.4 线性表类的实现 33

2.4.1 线性表的抽象类 33

2.4.2 顺序表类的实现 35

2.4.3 双链表类的实现 37

2.5 STL中的线性表 41

2.5.1 容器和迭代器的概念 41

2.5.2 vector类和list类 42

2.5.3 vector类和list类的使用 44

2.5.4 双端队列-deque 47

2.6 线性表的应用:文本编辑系统 47

2.7 小结 48

2.8 习题 48

第3章 栈 51

3.1 栈的基本概念 51

3.2 栈的顺序实现 52

3.3 栈的链接实现 53

3.4 栈类的实现 54

3.4.1 栈的抽象类 54

3.4.2 顺序栈类的实现 54

3.4.3 链接栈类的实现 56

3.5 STL中的栈 57

3.6 栈的应用 59

3.6.1 递归消除 59

3.6.2 括号配对 62

3.6.3 简单的计算器 72

3.7 总结 82

3.8 习题 83

第4章 队列 84

4.1 队列的概念 84

4.2 队列的顺序实现 85

4.2.1 队头位置固定的顺序实现 85

4.2.2 队头位置不固定的顺序实现 86

4.2.3 循环队列 87

4.3 队列的链接实现 89

4.4 队列类的实现 90

4.4.1 队列的抽象类 90

4.4.2 循环队列类的实现 91

4.4.3 链接队列类的实现 93

4.5 STL中的队列 95

4.6 队列的应用:排队系统的模拟 96

4.7 总结 101

4.8 习题 101

第二部分 树形结构 105

第5章 树 105

5.1 树的概念 105

5.1.1 树的定义 105

5.1.2 树的基本术语 106

5.1.3 树的基本运算 107

5.2 二叉树 107

5.2.1 二叉树的基本概念 107

5.2.2 二叉树的主要性质 109

5.2.3 二叉树的基本运算和二叉树的遍历 111

5.2.4 二叉树的顺序实现 114

5.2.5 二叉树的链接实现 116

5.2.6 二叉树类的实现 118

5.2.7 二叉树遍历的非递归实现 126

5.3 二叉树的应用:计算表达式 129

5.4 哈夫曼树和哈夫曼编码 140

5.4.1 前缀编码 141

5.4.2 哈夫曼算法 143

5.4.3 哈夫曼树类的实现 146

5.5 树和森林 150

5.5.1 树的存储实现 150

5.5.2 树的遍历 152

5.5.3 树、林与二叉树的关系 153

5.6 总结 155

5.7 习题 155

第6章 优先级队列 158

6.1 基本的优先级队列 158

6.2 二叉堆 158

6.2.1 二叉堆的结构性 158

6.2.2 二叉堆的有序性 159

6.2.3 基于二叉堆的优先级队列的实现 160

6.3 D堆 168

6.4 归并优先级队列 169

6.4.1 左堆 169

6.4.2 斜堆 171

6.4.3 贝努里队列 172

6.5 STL中的优先级队列 176

6.6 多服务台排队系统的模拟 177

6.7 总结 182

6.8 习题 183

第三部分 集合 187

第7章 集合与静态查找表 187

7.1 集合的基本概念 187

7.2 查找的基本概念 187

7.3 静态表查找 188

7.4 无序表的查找 188

7.4.1 顺序查找 188

7.4.2 顺序查找的时间复杂度分析 189

7.5 有序表的查找 190

7.5.1 顺序查找 190

7.5.2 二分查找 190

7.5.3 插值查找 192

7.5.4 分块查找 192

7.6 静态查找表的实现 193

7.7 STL中的静态表 194

7.8 总结 196

7.9 习题 196

第8章 查找树 197

8.1 二叉查找树 197

8.1.1 二叉查找树的定义 197

8.1.2 二叉查找树的操作 198

8.1.3 二叉查找树的性能 203

8.1.4 二叉查找树类的实现 204

8.2 AVL树 209

8.2.1 AVL树的定义 209

8.2.2 AVL树的插入操作 211

8.2.3 AVL树的删除操作 217

8.2.4 AVL树类的实现 221

8.3 红黑树 227

8.3.1 红黑树的定义 227

8.3.2 红黑树的插入操作 228

8.3.3 红黑树的删除操作 234

8.3.4 红黑树类的实现 239

8.4 AA树 249

8.4.1 AA树的定义 249

8.4.2 AA树的插入操作 250

8.4.3 AA树的删除操作 253

8.4.4 AA树类的实现 256

8.5 伸展树 260

8.5.1 伸展树的定义 260

8.5.2 伸展操作的实现 262

8.6 B树和B+树 265

8.6.1 B树 266

8.6.2 B+树 267

8.7 STL中的查找表 273

8.7.1 set 273

8.7.2 map 274

8.8 总结 275

8.9 习题 276

第9章 散列表 278

9.1 基本概念 278

9.2 散列函数 279

9.3 碰撞的解决 281

9.3.1 线性探测法 281

9.3.2 二次探测法 283

9.3.3 再散列法 285

9.3.4 开散列表 285

9.4 散列表类的实现 286

9.4.1 散列表类的抽象类 286

9.4.2 闭散列表的实现 287

9.4.3 开散列表的实现 290

9.5 散列表类的应用 293

9.6 总结 295

9.7 习题 295

第10章 排序 297

10.1 引言 297

10.2 插入排序 298

10.2.1 直接插入排序 298

10.2.2 二分插入排序 300

10.2.3 希尔排序 300

10.2.4 希尔排序的性能 302

10.3 选择排序 302

10.3.1 直接选择排序 303

10.3.2 堆排序 304

10.4 交换排序 307

10.4.1 冒泡排序 307

10.4.2 快速排序 308

10.5 归并排序 314

10.6 外排序 317

10.6.1 外排序的基本过程 317

10.6.2 预处理阶段 317

10.6.3 归并阶段 319

10.7 总结 321

10.8 习题 321

第11章 不相交集 323

11.1 等价关系与等价类 323

11.2 不相交集 324

11.3 不相交集的实现 324

11.3.1 不相交集的存储实现 324

11.3.2 不相交集的运算实现 325

11.3.3 改进的union算法 325

11.3.4 改进的find算法 327

11.4 不相交集类的实现 327

11.5 不相交集的应用 329

11.5.1 生成迷宫 329

11.5.2 最近的共同祖先问题 331

11.6 总结 332

11.7 习题 332

第四部分 图 335

第12章 图的基本概念 335

12.1 图的定义 335

12.2 图的基本术语 336

12.3 图的基本运算 338

12.4 图的存储 339

12.4.1 邻接矩阵表示法 339

12.4.2 邻接表表示法 343

12.5 图的遍历 347

12.5.1 深度优先搜索DFS 348

12.5.2 广度优先搜索BFS 351

12.6 图的遍历的应用 353

12.6.1 无向图的连通性 353

12.6.2 欧拉回路 353

12.6.3 有向图的连通性 359

12.6.4 拓扑排序 360

12.7 总结 363

12.8 习题 364

第13章 最小生成树 366

13.1 生成树和最小生成树 366

13.2 Kruskal算法 367

13.3 Prim算法 370

13.4 算法的正确性 374

13.5 总结 375

13.6 习题 375

第14章 最短路径问题 376

14.1 单源最短路径 376

14.1.1 非加权图的最短路径 376

14.1.2 加权图的最短路径 382

14.1.3 带有负权值的图 387

14.1.4 无环图 388

14.2 所有顶点对的最短路径 390

14.3 总结 393

14.4 习题 393

第五部分 算法设计基础第15章 算法设计基础 397

15.1 枚举法 397

15.2 贪婪法 398

15.3 分治法 399

15.3.1 最大连续子序列和的问题 399

15.3.2 整型数的乘法问题 401

15.3.3 平面上的最近点问题 401

15.4 动态规划 402

15.4.1 硬币找零问题 404

15.4.2 最优二叉查找树 406

15.5 回溯法 409

15.6 随机算法 413

15.6.1 跳表 414

15.6.2 素数检测 416

15.7 总结 418

15.8 习题 418

参考文献 420