《算法与数据结构 C语言描述 第2版》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:张乃孝编著
  • 出 版 社:北京:高等教育出版社
  • 出版年份:2006
  • ISBN:7040185768
  • 页数:359 页
图书介绍:“算法与数据结构”在许多高等院校中是一门公共必修课,北京大学把它作为第一批理科各系主干基础课列入学校的教学计划之中。本书以数据结构为主线,算法为辅线组织教学内容。全书共分十章:绪论、线性表、字符串、栈与队列、二叉树与树、集合与字典、高级字典结构、排序、图和算法分析与设计。

1 绪论 1

1.1 从问题到程序 1

1.1.1 问题分析与抽象 2

1.1.2 程序的设计与实现 3

1.2 抽象数据类型 6

1.2.1 什么是抽象数据类型 6

1.2.2 意义与作用 7

1.2.3 举例 7

1.3 数据结构 8

1.3.1 什么是数据结构 9

1.3.2 数据结构的分类 10

1.3.3 结点与结构 12

1.3.4 外存数据的组织 13

1.4 算法 16

1.4.1 什么是算法 16

1.4.2 算法的设计 17

1.4.3 算法的精化 18

1.4.4 算法的分析 21

小结 25

习题 27

2 线性表 29

2.1 基本概念与抽象数据类型 29

2.1.1 基本概念 29

2.1.2 抽象数据类型 30

2.2 顺序表示 31

2.2.1 存储结构 31

2.2.2 运算的实现 33

2.2.3 分析与评价 36

2.2.4 顺序表空间的扩展 38

2.3 链接表示 39

2.3.1 单链表表示 39

2.3.2 单链表上运算的实现 41

2.3.3 分析与比较 44

2.3.4 单链表的改进和扩充 45

2.4 应用举例 48

2.4.1 Josephus问题 48

2.4.2 采用顺序表模拟 49

2.4.3 采用循环链表模拟 50

2.5 矩阵 53

2.5.1 矩阵的顺序表示 53

2.5.2 稀疏矩阵的表示方法 54

2.6 广义表与动态存储管理 57

2.6.1 广义表 58

2.6.2 结点的动态分配与回收 60

2.6.3 废料收集与存储压缩 64

小结 65

习题 66

3 字符串 69

3.1 字符串及其抽象数据类型 69

3.1.1 基本概念 69

3.1.2 抽象数据类型 70

3.2 字符串的实现 71

3.2.1 顺序表示 71

3.2.2 链接表示 72

3.3 模式匹配 75

3.3.1 朴素的模式匹配 75

3.3.2 无回溯的模式匹配 77

小结 83

习题 83

4 栈与队列 85

4.1 栈及其抽象数据类型 85

4.1.1 基本概念 85

4.1.2 抽象数据类型 86

4.2 栈的实现 86

4.2.1 顺序表示 86

4.2.2 链接表示 89

4.3 栈的应用 91

4.3.1 栈与递归 92

4.3.2 迷宫问题 96

4.3.3 表达式计算 100

4.4 队列及其抽象数据类型 102

4.4.1 基本概念 102

4.4.2 抽象数据类型 102

4.5 队列的实现 103

4.5.1 顺序表示 103

4.5.2 链接表示 106

4.6 队列的应用 109

小结 113

习题 114

5 二叉树与树 117

5.1 二叉树及其抽象数据类型 117

5.1.1 基本概念 117

5.1.2 主要性质 120

5.1.3 抽象数据类型 122

5.2 二叉树的周游 123

5.2.1 什么是周游 123

5.2.2 周游的分类 124

5.2.3 一个例子 125

5.2.4 周游的抽象算法 126

5.3 二叉树的实现 131

5.3.1 顺序表示 131

5.3.2 链接表示 133

5.3.3 线索二叉树 135

5.4 二叉树的应用 139

5.4.1 堆与优先队列 139

5.4.2 哈夫曼树及其应用 144

5.5 树及其抽象数据类型 151

5.5.1 基本概念 151

5.5.2 抽象数据类型 152

5.5.3 树的周游 153

5.6 树的实现 156

5.6.1 父指针表示法 156

5.6.2 子表表示法 158

5.6.3 长子-兄弟表示法 160

5.6.4 树的其他表示法 161

5.7 树林 162

5.7.1 树林的周游 162

5.7.2 树林的存储表示 162

5.7.3 树林与二叉树的转换 163

小结 165

习题 166

6 集合与字典 169

6.1 集合及其抽象数据类型 169

6.1.1 基本概念 169

6.1.2 主要运算 170

6.1.3 抽象数据类型 171

6.2 集合的实现 172

6.2.1 集合的位向量表示 172

6.2.2 集合的单链表表示 177

6.3 字典及其抽象数据类型 180

6.3.1 基本概念 180

6.3.2 抽象数据类型 181

6.4 字典的顺序表示 181

6.4.1 存储结构 181

6.4.2 算法的实现 182

6.4.3 有序顺序表与二分法检索 183

6.5 字典的散列表示 186

6.5.1 基本概念 186

6.5.2 散列函数 187

6.5.3 碰撞的处理 189

6.5.4 散列文件 195

小结 197

习题 198

7 高级字典结构 200

7.1 字典与索引 200

7.1.1 字典的索引 200

7.1.2 索引的抽象 201

7.2 字符树 202

7.2.1 双链树表示 203

7.2.2 多链表示 203

7.3 二叉排序树 205

7.3.1 二叉排序树 205

7.3.2 二叉排序树的检索 206

7.3.3 二叉排序树的插入和构造 206

7.3.4 二叉排序树的删除 209

7.4 最佳二叉排序树 211

7.4.1 基本概念 211

7.4.2 等概率的检索 213

7.4.3 不等概的情况 214

7.5 平衡二叉排序树 220

7.5.1 基本概念 220

7.5.2 调整平衡的模式 221

7.5.3 实现 226

7.6 索引文件 232

7.6.1 多分树 232

7.6.2 B树 234

7.6.3 B+树 239

小结 242

习题 243

8 排序 245

8.1 基本概念 245

8.2 插入排序 246

8.2.1 直接插入排序 246

8.2.2 二分法插入排序 249

8.2.3 表插入排序 251

8.2.4 Shell排序 252

8.3 选择排序 254

8.3.1 直接选择排序 254

8.3.2 堆排序 255

8.4 交换排序 259

8.4.1 起泡排序 259

8.4.2 快速排序 261

8.5 分配排序 263

8.5.1 概述 264

8.5.2 基数排序 264

8.6 归并排序 267

8.6.1 内排序 267

8.6.2 外排序 270

小结 276

习题 278

9 图 280

9.1 基本概念及其抽象数据类型 280

9.1.1 基本概念 280

9.1.2 抽象数据类型 283

9.2 图的周游 285

9.2.1 深度优先周游 285

9.2.2 广度优先周游 287

9.3 存储表示 288

9.3.1 邻接矩阵表示法 289

9.3.2 邻接表表示法 291

9.3.3 两种表示的比较 292

9.4 最小生成树 293

9.4.1 最小生成树及其性质 294

9.4.2 最小生成树的构造 295

9.5 最短路径 300

9.5.1 Dijkstra算法 301

9.5.2 Floyd算法 304

9.6 拓扑排序 307

9.6.1 AOV网 307

9.6.2 拓扑排序 308

9.7 关键路径 311

9.7.1 AOE网 311

9.7.2 关键路径 312

小结 316

习题 317

10 算法分析与设计 320

10.1 算法分析技术 320

10.1.1 空间代价分析 320

10.1.2 时间代价分析 322

10.2 算法设计技术 326

10 2.1 分治法 326

10.2.2 贪心法 327

10.2 3 动态规划法 330

10.2 4 回溯法 335

10.2.5 分枝界限法与0/1背包问题 338

小结 342

习题 343

参考文献 345

索引 346

算法清单 355

后记 358