《数据结构 C/C++版》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:杨正宏编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2004
  • ISBN:7302095493
  • 页数:335 页
图书介绍:本书以合适的算法来设计程序,采用简洁适用的数据结构来表示程序中的数据变量是数据结构包含的主要内容。它是对程序设计者最基本的要求,也是程序设计的理论基础。

第1章 数据结构概论 1

1.1 数据与信息 1

1.2 数据处理 2

1.3 计算器操作方式 4

1.4 程序的产生 4

1.5 程序的分析 5

1.5.1 如何分析程序 8

1.6 算法 8

1.6.1 算法的书写 9

1.6.2 算法效率的评估 12

1.7 复杂度 12

1.7.1 复杂度的表示法 13

1.8 NP-Complete 15

1.9 参数的传递 17

1.10 数据结构 19

1.10.1 数据结构探讨问题 19

1.11 魔术方阵 20

1.12 习题 21

第2章 数组结构 23

2.1 数组的定义 23

2.2 数组表示法 24

2.2.1 一维数组 24

2.2.2 二维数组 24

2.2.3 三维数组 26

2.2.4 多维数组 27

2.3 稀疏矩阵 28

2.3.1 稀疏矩阵的转置 29

2.4.1 多项式的数据结构 31

2.4 数组的应用 31

2.4.2 多项式相加 32

2.4.3 上三角矩阵储存方式 34

2.4.4 下三角矩阵储存方式 39

2.4.5 带状矩阵 44

2.4.6 矩阵相乘 48

2.5 最佳洗牌法 49

2.6 习题 50

3.2 动态内存配置 52

3.2.2 函数free() 52

3.2.1 函数malloc() 52

3.1 链表的定义 52

第3章 链表 52

3.3 链表的创建 53

3.3.1 动态数据结构的声明 53

3.3.2 内存的配置 53

3.3.3 基本链表的创建 54

3.4 链表的遍历 56

3.5 链表的连结 57

3.6 链表内节点的删除 57

3.7 释放链表的内存空间 58

3.8 链表内节点的插入 59

3.9 链表结构的反转 60

3.10 环状链表结构 62

3.10.1 环状链表的创建 62

3.10.2 环状链表内节点的插入 63

3.10.3 环状链表内节点的删除 64

3.11 使用环状链表结构表示稀疏矩阵 66

3.12 双向链表结构 70

3.12.1 双向链表的创建 71

3.12.2 双向链表内节点的插入 72

3.12.3 双向链表内节点的删除 74

3.13 环状双向链表结构 75

3.14 习题 78

第4章 递归 80

4.1 递归的定义 80

4.2 递归工作原则 82

4.3 递归的执行过程 83

4.3.1 递归树 84

4.3.2 费氏数列 86

4.4 递归的应用 89

4.4.1 汉诺塔问题 89

4.4.2 迷宫问题 92

4.4.3 八皇后问题 96

4.4.4 骑士问题 99

4.4.5 最大公因子 102

4.4.6 史波克先生的难题 103

4.5 递归程序与非递归程序的差异 104

4.6 习题 106

第5章 栈 107

5.1 栈的定义 107

5.2 栈的制作及操作方式 107

5.3.1 算术表达式的转换(Expression Conversion) 112

5.3 栈的应用 112

5.3.2 处理子程序调用 115

5.3.3 处理中断例程 116

5.3.4 编译错误处理 117

5.3.5 汉诺塔问题 117

5.3.6 迷宫问题 121

5.3.7 八皇后问题 125

5.4 习题 127

第6章 队列 129

6.1 队列的定义 129

6.2 线性队列的制作及操作方式 129

6.2.1 以数组制作线性队列 129

6.2.2 以链表制作线性队列 134

6.3.1 以数组制作环状队列 137

6.3 环状队列的制作及操作方式 137

6.3.2 以链表制作环状队列 141

6.4 双向队列 143

6.5 优先队列 144

6.5.1 优先队列的特性 145

6.5.2 用双队列表示优先队列 145

6.6 多重队列 145

6.7 队列的应用 146

6.7.1 买票问题 146

6.7.2 Josephus问题 150

6.8 习题 151

7.1 基本术语 152

第7章 树状结构 152

7.2 树的表示法 153

7.3 二叉树 156

7.3.1 二叉树的创建 160

7.3.2 二叉树的遍历 161

7.3.3 二叉树的搜索 164

7.3.4 二元树的删除 164

7.3.5 二元树的比较 165

7.3.6 一般树转换至二叉树 166

7.3.7 二叉表示树 168

7.4 相关二叉树 170

7.4.1 完全平衡树 170

7.4.2 满二叉树 171

7.4.4 线索二叉树(Threaded Binary Tree) 172

7.4.3 完全二叉树 172

7.4.5 扩充二叉树 173

7.4.6 赫夫曼树 174

7.4.7 贪婪二元树(Greedy Binary Tree) 178

7.4.8 高度平衡二叉树 180

7.4.9 扇形树 183

7.5 二元树的衍生 186

7.5.1 2-3树与2-3-4树 186

7.5.2 红-黑树(Red-Black Tree) 190

7.5.3 最小-最大堆树 192

7.5.4 双堆树 194

7.5.5 B树 195

7.6.1 皇后问题 198

7.6 树的应用 198

7.6.2 游戏树 199

7.6.3 决策树 201

7.7 习题 202

第8章 图 205

8.1 前言 205

8.2 图的基本观念 206

8.2.1 无向图的一些重要术语 207

8.2.2 有向图的一些重要术语 208

8.2.3 其他重要术语 210

8.3 图的表示法 210

8.3.1 邻接矩阵 210

8.3.2 邻接表 212

8.3.3 邻接多重表 214

8.3.4 索引表格法 215

8.4 图的遍历 215

8.4.1 深度优先搜索法 215

8.4.2 广度优先搜索法 216

8.5 扩张树 217

8.5.1 克鲁斯卡(Kruskal)法 220

8.5.2 普瑞法 222

8.6 拓朴排序 226

8.7 最短路径 229

8.8 习题 235

第9章 排序 238

9.1 前言 238

9.2.1 交换式排序 239

9.2 内部排序法 239

9.2.2 插入式排序 248

9.2.3 选择和树状排序 257

9.2.4 其他排序 270

9.3 外部排序法 281

9.3.1 直接合并排序法 281

9.3.2 自然合并排序法 281

9.3.3 k-路合并法 282

9.3.4 多阶段合并法 285

9.4 排序法的效益评估 287

9.5 习题 288

10.1 前言 290

10.2 顺序查找法 290

第10章 查找 290

10.3 折半查找法 292

10.4 费氏查找法 293

10.5 区块查找法 298

10.6 插补查找法 299

10.7 基数查找法 302

10.8 树状查找法 303

10.8.1 折半查找树 303

10.8.2 B树查找法 304

10.8.3 B+树(B+Tree) 305

10.8.4 数字查找树 307

10.8.5 补偿树 308

10.9 散列查找法 311

10.9.2 摘取法 312

10.9.1 直接定址法 312

10.9.3 除法 313

10.9.4 乘法 314

10.9.5 平方取中法 314

10.9.6 折叠法 314

10.9.7 解决散列冲突方法 315

10.9.8 自哈希表删除项目 318

10.9.9 哈希法的评估 318

10.10 习题 318

第11章 动态内存管理 320

11.1 前言 320

11.2 内存分配方法 321

11.3 边界标记法 322

11.3.1 可利用空间链表的结构 323

11.3.2 分配算法 324

11.3.3 回收算法 325

11.4 伙伴系统 327

11.4.1 可利用空间链表的结构 327

11.4.2 分配算法 328

11.4.3 回收算法 329

11.5 费氏伙伴系统 330

11.6 无用单元收集 331

11.7 无用单元收集的改良 333

11.8 内存压缩 333

11.9 习题 334