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

  • 购买积分:13 如何计算积分?
  • 作  者:陈慧南编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2005
  • ISBN:711512941X
  • 页数:355 页
图书介绍:本书采用面向对象的观点讨论数据结构,并使用C++语言描述。书中系统地介绍各种传统的数据结构和摸索、内外排序算法。

第1章 基础知识 1

1.1 算法与数据结构 1

目录 1

1.2 什么是数据结构 2

1.2.1 基本概念 2

1.2.2 数据的逻辑结构 3

1.2.3 数据的存储表示 4

1.2.4 数据结构的运算 4

1.3 数据抽象和抽象数据类型 5

1.3.1 抽象、数据抽象和过程抽象 5

1.3.3 数据类型和抽象数据类型 6

1.3.2 封装与信息隐蔽 6

1.3.4 数据结构与抽象数据类型 7

1.4 面向对象方法 7

1.4.1 面向对象方法的由来 7

1.4.2 面向对象方法的基本思想 7

1.4.3 面向对象方法的要素 8

1.4.4 面向对象方法和抽象数据类型 9

1.5 *C++程序设计概要 9

1.5.1 函数与参数传递 9

1.5.2 动态存储分配 12

1.5.3 类与对象 13

1.5.4 函数和运算符重载 14

1.5.5 继承性和派生类 15

1.5.6 多态性、虚函数和动态联编 16

1.5.7 纯虚函数和抽象类 17

1.5.8 友元函数和友元类 18

1.5.9 模板函数和模板类 18

1.6 描述数据结构和算法 21

1.6.1 数据结构的规范 21

1.6.2 实现数据结构 22

1.7 算法和算法分析 23

1.7.1 算法及其性能标准 23

1.7.2 算法的时间复杂度 24

1.7.3 使用程序步分析算法 26

1.7.4 渐近表示法 28

1.7.5 算法按时间复杂度分类 29

1.7.6 算法的空间复杂度 30

本章小结 30

习题 31

第2章 数组和链表 33

2.1 结构和类 33

2.1.1 结构 33

2.1.2 结构表示元素 34

2.2.1 指针 36

2.2 指针和动态存储分配 36

2.2.2 动态存储分配 37

2.2.3 静态变量和动态变量 38

2.3 数组 38

2.3.1 一维数组 38

2.3.2 二维数组 39

2.3.3 多维数组 40

2.3.4 数组和指针 40

2.4 链表 41

2.4.2 单链表 42

2.4.1 指向结构的指针 42

2.4.3 带表头结点的单链表 45

2.4.4 单循环链表 45

2.4.5 双向链表 46

2.5 采用模拟指针的链表 47

2.5.1 结点结构 47

2.5.2 可用空间表 48

2.6 异常处理 50

本章小结 51

习题 51

3.1 堆栈 53

3.1.1 堆栈ADT 53

第3章 堆栈和队列 53

3.1.2 堆栈的顺序表示 54

3.1.3 堆栈的链接表示 57

3.2 队列 59

3.2.1 队列ADT 59

3.2.2 队列的顺序表示 61

3.2.3 队列的链接表示 64

3.3 *表达式计算 64

3.3.1 表达式 64

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

3.3.3 计算后缀表达式的值 68

3.4 *演示与测试 71

本章小结 75

习题 75

第4章 *递归 77

4.1 递归和递归算法 77

4.1.1 递归的概念 77

4.1.2 递归算法示例 78

4.1.3 递推关系 80

4.2 实现递归 81

4.2.1 函数调用和系统栈 81

4.2.2 递归函数的性能 82

4.2.4 消去递归 83

4.2.3 尾递归 83

本章小结 87

习题 87

第5章 线性表和数组ADT 88

5.1 线性表 88

5.1.1 线性表ADT 88

5.1.2 线性表的顺序表示 90

5.1.3 线性表的链接表示 93

5.1.4 两种存储表示的比较 96

5.2.1 多项式ADT 97

5.2 *一元多项式算术运算 97

5.2.2 多项式的链接表示 98

5.2.3 项结点类 98

5.2.4 多项式类 99

5.2.5 多项式的输入和输出 100

5.2.6 多项式相加 101

5.2.7 多项式相乘 102

5.2.8 重载运算符函数 103

5.3 数组作为抽象数据类型 104

5.3.1 数组ADT 104

5.3.2 一维数组的C++类 105

5.4.1 对称矩阵 106

5.4 特殊矩阵 106

5.4.2 *带状矩阵 107

5.5 稀疏矩阵 108

5.5.1 稀疏矩阵ADT 108

5.5.2 稀疏矩阵的三元组表 109

5.5.3 稀疏矩阵转置 110

5.5.4 *稀疏矩阵相乘 112

5.6 *稀疏矩阵的正交链表 115

5.6.1 稀疏矩阵的正交链表表示 115

5.6.2 正交链表结点类 116

5.6.3 正交链表类 117

5.6.4 建立正交链表 118

5.6.5 打印正交链表 119

本章小结 120

习题 120

第6章 字符串和广义表 122

6.1 字符串 122

6.1.1 字符串ADT 122

6.1.2 字符串的存储表示 123

6.1.3 串运算的实现 124

6.1.4 简单模式匹配算法 125

6.1.5 *模式匹配的KMP算法 127

6.2.1 广义表的概念 131

6.2 *广义表 131

6.2.2 广义表ADT 132

6.2.3 广义表的存储表示 133

6.2.4 广义表算法 134

本章小结 135

习题 135

第7章 树 137

7.1 树的基本概念 137

7.1.1 树的定义 137

7.1.2 基本术语 138

7.2.1 二叉树的定义 139

7.2 二叉树 139

7.2.2 二叉树的性质 140

7.2.3 二叉树ADT 141

7.2.4 二叉树的存储表示 142

7.2.5 二叉树类 143

7.2.6 二叉树基本运算 144

7.3 二叉树的遍历 146

7.3.1 二叉树遍历算法 146

7.3.2 二叉树遍历的递归算法 147

7.3.3 二叉树遍历的应用示例 149

7.4.1 遍历器类 151

7.4 *二叉树遍历的非递归算法 151

7.4.2 中序遍历器类 153

7.4.3 后序遍历器类 154

7.5 *二叉线索树 157

7.5.1 叉线索树的定义 157

7.5.2 构造中序线索树 158

7.5.3 遍历二叉线索树 159

7.6 树和森林 161

7.6.1 森林与二叉树的转换 161

7.6.2 树和森林的存储表示 162

7.7 *堆和优先权队列 164

7.6.3 树和森林的遍历 164

7.7.1 堆 165

7.7.2 优先权队列ADT 167

7.7.3 优先权队列类 168

7.7.4 实现优先权队列 168

7.8 哈夫曼树和哈夫曼编码 170

7.8.1 树的路径长度 171

7.8.2 哈夫曼树和哈夫曼算法 172

7.8.3 哈夫曼树类 173

7.8.4 构造哈夫曼树 173

7.8.5 哈夫曼编码 175

7.8.6 哈夫曼编码算法 176

7.9.1 并查集ADT 177

7.9 *并查集和等价关系 177

7.9.2 并查集的存储表示 178

7.9.3 并查集类 178

7.9.4 函数Union和Find 179

7.9.5 改进的函数Union和Find 179

7.9.6 按等价关系分组 181

本章小结 181

习题 182

8.1.1 集合和搜索的概念 184

第8章 集合和搜索 184

8.1 集合及其表示 184

8.1.2 动态集ADT 185

8.1.3 集合的表示 186

8.2 顺序搜索 187

8.2.1 无序表的顺序搜索 187

8.2.2 有序表的顺序搜索 188

8.2.3 平均搜索长度 188

8.2.4 自组织表 189

8.3.1 二分搜索算法 190

8.3 二分搜索 190

8.3.2 对半搜索 191

8.3.3 二叉判定树 192

8.3.4 *斐波那契搜索 193

8.4 *搜索算法的时间下界 195

本章小结 196

习题 196

第9章 动态集和搜索树 197

9.1 二叉搜索树 197

9.1.1 二叉搜索树的定义 197

9.1.2 二叉搜索树的搜索 198

9.1.3 二叉搜索树的插入 199

9.1.4 二叉搜索树的删除 200

9.1.5 平均情况时间分析 201

9.2 *二叉平衡树 203

9.2.1 二叉平衡树的定义 203

9.2.2 二叉平衡树类 204

9.2.3 二叉平衡树的平衡旋转 205

9.2.4 二叉平衡树的插入 210

9.2.5 二叉平衡树的删除 211

9.2.6 二叉平衡树的高度 214

9.3.1 自调节树和伸展树 215

9.3.2 伸展树的伸展操作 215

9.3 *伸展树 215

9.3.3 伸展树类 217

9.3.4 旋转的实现 218

9.3.5 伸展树的插入运算 218

9.3.6 时间分析 220

本章小结 222

习题 222

第10章 多叉搜索树 224

10.1 m叉搜索树 224

10.2.2 B树的高度 226

10.2.1 B树的定义 226

10.2 B树 226

10.2.3 B树的搜索 227

10.2.4 B树的插入 227

10.2.5 B树的删除 229

10.2.6 *B树类 231

10.2.7 *B树的搜索运算 232

10.2.8 *B树的插入运算 233

10.2.9 *B树的删除运算 235

10.3 *键树 239

10.3.1 键树的定义 239

10.3.2 链树 239

10.3.3 Trie树 240

10.3.4 Trie树的搜索 242

10.3.5 Trie树的插入 243

10.3.6 Trie树的删除 243

10.3.7 Trie树性能分析 244

本章小结 244

习题 244

第11章 跳表和散列表 246

11.1 字典 246

11.2 *跳表 246

11.2.1 什么是跳表 246

11.2.2 跳表类 248

11.2.3 跳表的搜索 250

11.2.4 跳表的插入 251

11.2.5 跳表的删除 252

11.3 散列表 253

11.3.1 散列技术 253

11.3.2 散列函数 254

11.3.3 拉链法 255

11.3.4 开地址法 256

11.3.5 线性探查法 256

11.3.6 其他开地址法 260

本章小结 262

习题 262

11.3.7 性能分析 262

第12章 图 264

12.1 图的基本概念 264

12.1.1 图的定义与术语 264

12.1.2 图ADT 266

12.2 图的存储结构 267

12.2.1 图的矩阵表示法 267

12.2.2 图的邻接矩阵实现 269

12.2.3 图的邻接表表示法 271

12.2.4 图的邻接表实现 272

12.3 图的遍历 274

12.3.1 扩充的图类 275

12.3.2 深度优先遍历 275

12.3.3 宽度优先遍历 277

12.3.4 基本遍历方法 278

12.4 拓扑排序 279

12.4.1 用顶点代表活动的AOV网 279

12.4.2 拓扑排序算法 280

12.4.3 实现拓扑排序算法 281

12.5 *关键路径 283

12.5.1 用边代表活动的AOE网 283

12.5.2 关键路径算法 284

12.5.3 实现关键路径算法 286

12.6.1 基本概念 287

12.6.2 普里姆算法 287

12.6 最小代价生成树 287

12.6.3 *克鲁斯卡尔算法 289

12.6.4 *算法正确性 291

12.7 单源最短路径 292

12.7.1 最短路径问题 292

12.7.2 迪杰斯特拉算法 292

12.7.3 数据结构选择 293

12.7.4 实现迪杰斯特拉算法 293

12.8.1 弗洛伊德算法 296

12.8 *所有顶点之间的最短路径 296

12.8.2 实现弗洛伊德算法 297

本章小结 298

习题 298

第13章 内排序 300

13.1 基本概念 300

13.2 插入排序 301

13.2.1 直接插入排序 301

13.2.2 顺序表直接插入排序 302

13.2.3 *单链表直接插入排序 303

13.2.4 *希尔排序 305

13.3 选择排序 306

13.3.1 简单选择排序 307

13.3.2 *堆排序 308

13.4 交换排序 309

13.4.1 冒泡排序 309

13.4.2 快速排序 311

134.3 快速排序算法 311

134.4 *快速排序性能分析 313

13.5 两路合并排序 315

13.5.1 合并两个有序序列 315

13.5.2 顺序表两路合并排序 316

13.5.3 *合并排序的递归算法 317

13.5.4 *单链表两路合并排序 317

13.6 *排序算法的时间下界 320

13.7 *基数排序 321

13.7.1 分配排序 321

13.7.2 基数排序算法 322

13.7.3 基数排序C++程序 323

本章小结 325

习题 325

14.1.1 主存储器和辅助存储器 327

14.1.2 磁盘存储器 327

14.1 辅助存储器简介 327

第14章 *文件和外排序 327

14.2 文件 328

14.2.1 文件的基本概念 328

14.2.2 文件的组织方式 329

14.3 文件的索引结构 332

14.3.1 静态索引结构 332

14.3.2 动态索引结构 332

14.4 外排序 333

14.4.1 外排序的基本过程 333

14.4.2 初始游程的生成 334

14.4.3 多路合并 338

14.4.4 最佳合并树 340

本章小结 340

习题 341

附录A 实习要求和实习题 342

A.1 面向对象方法概述 342

A.2 实习目的 344

A.3 实习要求 344

A.4 实习步骤 344

A.5 实习报告 345

A.6 实习题 346

附录B 专有名词中英文对照表 349

参考文献 355