《数据结构-C语言描述》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:陈慧南编著
  • 出 版 社:西安:西安电子科技大学出版社
  • 出版年份:2003
  • ISBN:7560612555
  • 页数:308 页
图书介绍:本书讲述数据结构和算法原理。

第1章 概论 1

1.1 什么是数据结构 1

1.2 数据抽象和抽象数据类型 4

1.3 数据结构的描述 6

1.4 算法和算法分析 8

1.4.1 算法及其性能标准 8

1.4.2 算法的时间复杂度 9

1.4.3 渐近时间复杂度 11

1.4.4 最坏、最好和平均情况时间复杂度 12

1.4.5 算法的空间复杂度 12

小结 13

习题1 13

第2章 两种基本数据结构 15

2.1 结构与联合 15

2.1.1 结构 15

2.1.2 联合 16

2.2 数组 17

2.2.1 一维数组 17

2.2.2 二维数组 17

2.2.3 多维数组 19

2.3 链表 19

2.3.1 指针 19

2.3.2 单链表 23

2.3.3 带表头结点的单链表 29

2.3.4 循环链表 30

2.3.5 双向链表 31

小结 32

习题2 33

第3章 堆栈和队列 34

3.1 堆栈 34

3.1.1 堆栈 ADT 34

3.1.2 堆栈的顺序表示 35

3.1.3 堆栈的链接表示 37

3.2 队列 38

3.2.1 队列 ADT 38

3.2.2 队列的顺序表示 39

3.2.3 队列的链接表示 42

3.3* 表达式的计算 42

3.3.1 表达式 42

3.3.2 中缀表达式转换为后缀表达式 43

3.3.3 计算后缀表达式的值 46

3.4* 递归和递归过程 49

3.4.1 递归的概念 49

3.4.2 递归的实现 50

3.5* 演示和测试 52

小结 54

习题3 54

第4章 线性表和数组 56

4.1 线性表 56

4.1.1 线性表 ADT 56

4.1.2 线性表的顺序表示 57

4.1.3 线性表的链接表示 61

4.1.4 两种存储表示的比较 64

4.2* 多项式的算术运算 65

4.2.1 多项式 ADT 65

4.2.2 多项式的链接表示 65

4.2.3 多项式的输入和输出 66

4.2.4 多项式相加 68

4.3 数组作为抽象数据类型 70

4.4 特殊矩阵 71

4.4.1 对称矩阵 71

4.4.2* 带状矩阵 72

4.5 稀疏矩阵 73

4.5.1 稀疏矩阵 ADT 73

4.5.2 稀疏矩阵的顺序表示 74

4.5.3 稀疏矩阵转置 75

4.5.4* 稀疏矩阵相乘 77

4.5.5 稀疏矩阵的正交链表表示 80

4.5.6* 建立正交链表 83

4.5.7* 打印正交链表 84

小结 85

习题4 85

第5章 字符串和广义表 87

5.1 字符串 87

5.1.1 字符串 ADT 87

5.1.2 字符串的存储表示 88

5.1.3 简单模式匹配算法 89

5.1.4* 模式匹配的 KMP 算法 92

5.2* 广义表 96

5.2.1 广义表的概念 96

5.2.2 广义表 ADT 97

5.2.3 广义表的存储表示 98

5.2.4 广义表的算法 99

小结 99

习题5 100

第6章 树 101

6.1 树的基本概念 101

6.1.1 树的定义 101

6.1.2 基本术语 102

6.2 二叉树 103

6.2.1 二叉树的定义和性质 103

6.2.2 二叉树 ADT 105

6.2.3 二叉树的存储表示 106

6.2.4 二叉树的遍历 110

6.2.5* 二叉树遍历的非递归算法 114

6.2.6* 二叉树遍历的应用实例 116

6.2.7* 线索二叉树 118

6.3 树和森林 122

6.3.1 森林与二叉树的转换 122

6.3.2 树和森林的存储表示 123

6.3.3 树和森林的遍历 125

6.4* 堆和优先权队列 126

6.4.1 堆 126

6.4.2 优先权队列 129

6.5 哈夫曼树和哈夫曼编码 132

6.5.1 树的路径长度 132

6.5.2 哈夫曼树和哈夫曼算法 133

6.5.3 哈夫曼编码 135

6.6* 并查集和等价关系 137

6.6.1 并查集 137

6.6.2 并查集的实现 138

6.6.3 集合按等价关系分组 140

小结 141

习题6 141

第7章 集合和搜索 144

7.1 集合及其表示 144

7.1.1 集合和搜索 144

7.1.2 集合 ADT 145

7.1.3 集合的表示 146

7.2 顺序搜索 146

7.3 二分搜索 149

7.3.1 对半搜索 149

7.3.2* 二叉判定树 150

7.3.3* 斐波那契搜索 152

7.4* 搜索算法的时间下界 154

小结 155

习题7 155

第8章 搜索树 156

8.1 二叉搜索树 156

8.1.1 二叉搜索树的定义 156

8.1.2 二叉搜索树的搜索 157

8.1.3 二叉搜索树的插入 158

8.1.4 二叉搜索树的删除 159

8.1.5* 二叉搜索树的高度 162

8.2* 二叉平衡树 162

8.2.1 二叉平衡树的定义 163

8.2.2 二叉平衡树的平衡旋转 163

8.2.3 二叉平衡树的插入 169

8.2.4 二叉平衡树的删除 172

8.2.5 二叉平衡数的高度 175

8.3 B-树 176

8.3.1 m 叉搜索树 176

8.3.2 B-树的定义 178

8.3.3 B-树的高度 178

8.3.4 B-树的搜索 179

8.3.5 B-树的插入 179

8.3.6 B-树的删除 182

8.4* 键树 184

8.4.1 键树的定义 184

8.4.2 双链树 185

8.4.3 Trie 树 185

8.5* 伸展树 186

小结 189

习题8 189

第9章 跳表和散列表 191

9.1 字典 191

9.2* 跳表 191

9.2.1 什么是跳表 192

9.2.2 跳表的搜索 195

9.2.3 跳表的插入 196

9.2.4 跳表的删除 197

9.3 散列表 198

9.3.1 散列技术 198

9.3.2 散列函数 199

9.3.3 解决冲突的拉链法 201

9.3.4 解决冲突的线性探查法 202

9.3.5 解决冲突的其他开地址法 206

9.3.6 性能分析 208

小结 208

习题9 209

第10章 图 210

10.1 图的基本概念 210

10.1.1 图的定义与术语 210

10.1.2 图 ADT 213

10.2 图的存储结构 214

10.2.1 矩阵表示法 214

10.2.2 邻接表表示法 217

10.2.3* 多重表表示法 220

10.3 图的遍历 221

10.3.1 深度优先遍历 221

10.3.2 宽度优先遍历 223

10.4 拓扑排序和关键路径 225

10.4.1 拓扑排序 225

10.4.2* 关键路径 228

10.5 最小代价生成树 232

10.5.1 普里姆算法 233

10.5.2* 克鲁斯卡尔算法 234

10.6* 最短路径 236

10.6.1 单源最短路径 237

10.6.2 所有顶点之间的最短路径 240

小结 243

习题10 243

第11章 内排序 246

11.1 排序的基本概念 246

11.2 插入排序 247

11.2.1 直接插入排序 247

11.2.2* 希尔排序 251

11.3 交换排序 252

11.3.1 冒泡排序 253

11.3.2 快速排序 254

11.4 合并排序 259

11.4.1 两路合并排序 259

11.4.2 合并排序的迭代算法 260

11.4.3* 链表上的合并排序 261

11.5 选择排序 265

11.5.1 简单选择排序 265

11.5.2* 堆排序 266

11.6* 排序算法的时间下界 267

11.7* 基数排序 269

小结 272

习题11 272

第12章 文件和外排序 274

12.1* 辅助存储器简介 274

12.1.1 主存储器和辅助存储器 274

12.1.2 磁盘存储器 274

12.2 文件 276

12.2.1 文件的基本概念 276

12.2.2 文件的组织方式 276

12.2.3 C 语言文件 280

12.3 文件的索引结构 281

12.3.1 静态索引结构 281

12.3.2 动态索引结构 282

12.4* 外排序 283

12.4.1 外排序的基本过程 283

12.4.2 初始游程的生成 283

12.4.3 多路合并 286

12.4.4 最佳合并树 288

小结 289

习题12 289

附录 A 软件工程概述 290

一、软件开发方法学 290

二、系统测试方法 292

附录 B 实习要求和实习题 294

一、实习目的 294

二、实习要求 294

三、实习步骤 294

四、实习报告 295

五、实习题 296

附录 C 专用名词中英文对照表 298

参考文献 304