《数据结构:C++实现 第2版》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:缪淮扣,沈俊,顾训穰编著
  • 出 版 社:北京:科学出版社
  • 出版年份:2014
  • ISBN:9787030407399
  • 页数:342 页
图书介绍:数据结构是计算机专业教学计划中的一门核心课程,也是信息管理、通信电子、自动控制等与计算机技术关系密切的专业的一门基础课程。从事与计算机科学与技术相关的工作,尤其是计算机应用领域的开发和研制工作,必须具备坚实的数据结构的基础。本书对C++语言作了简单介绍,叙述了抽象数据类型和面向对象的概念,介绍了线性表、栈、队列、数组、广义表、树、图等数据结构,并介绍了查找和排序的方法。全书用C++语言描述并实现了所有数据结构的类和程序,并附有习题,便于教学。

第一章 绪论 1

1.1 (算法+数据结构)=程序 1

1.2 数据结构的基本概念 2

1.2.1 两个简单的数据结构实例 2

1.2.2 数据结构的定义 3

1.3 算法性能与复杂度 5

1.3.1 算法的定义 5

1.3.2 算法的性能标准 6

1.3.3 算法复杂度 7

习题一 10

第二章 C++程序设计语言简介 13

2.1 C++语言基础 13

2.1.1 程序结构 13

2.1.2 数据声明和作用域 14

2.1.3 输入/输出 16

2.1.4 函数 17

2.1.5 参数传递 18

2.1.6 函数名重载 19

2.1.7 动态内存分配 19

2.1.8 结构与联合 20

2.2 类与对象的基本概念 24

2.2.1 类与对象 24

2.2.2 消息与合作 26

2.2.3 多态性 26

2.3 面向对象的程序设计方法 26

2.4 C++类与对象 27

2.5 构造函数和析构函数 29

2.6 工具函数 31

2.7 继承 33

2.8 this指针的使用 36

2.9 虚函数、多态性以及动态联编 37

2.9.1 虚函数和多态性 37

2.9.2 动态联编 39

2.10 类模板 40

习题二 42

第三章 线性表 46

3.1 线性表的定义 46

3.2 线性表的顺序表示 47

3.2.1 顺序表的类模板定义 47

3.2.2 顺序表相关算法的复杂度分析 53

3.3 线性表的链表表示 53

3.3.1 单链表 54

3.3.2 双向循环链表 63

3.3.3 静态链表 70

3.4 线性表的应用 71

3.4.1 集合的表示和相关运算的实现 71

3.4.2 一元多项式表示和相关运算的实现 72

习题三 75

第四章 栈、队列和递归 79

4.1 栈 79

4.1.1 顺序栈 80

4.1.2 链式栈 83

4.1.3 栈的应用——表达式求值 86

4.2 队列 94

4.2.1 循环队列 95

4.2.2 链式队列 99

4.2.3 队列的应用——车厢调度 103

4.3 递归 105

4.3.1 递归的概念 105

4.3.2 递归过程与递归工作栈 106

4.3.3 消除递归 107

习题四 112

第五章 串、数组和广义表 115

5.1 字符串 115

5.1.1 字符串的基本概念 115

5.1.2 常用的C++字符串函数 117

5.1.3 串类的定义及其实现 118

5.1.4 模式匹配 125

5.2 数组 130

5.2.1 数组的基本概念 130

5.2.2 数组的顺序存储结构 130

5.3 稀疏矩阵 132

5.3.1 非零元素的三元组定义 133

5.3.2 三元组顺序表 133

5.3.3 十字链表 137

5.4 广义表 143

5.4.1 广义表的定义 143

5.4.2 广义表的存储结构 143

5.4.3 n元多项式的表示 149

习题五 151

第六章 树和森林 154

6.1 树的概念 154

6.1.1 树的定义 154

6.1.2 树的术语 155

6.1.3 树的表示形式 156

6.1.4 树的基本操作 156

6.2 二叉树 157

6.2.1 二叉树的定义 158

6.2.2 二叉树的性质 158

6.2.3 二叉树的基本操作 160

6.3 二叉树的存储结构 161

6.3.1 顺序二叉树 161

6.3.2 二叉树的链表表示法 162

6.3.3 二叉树的二叉链表类模板声明 163

6.4遍历二叉树 167

6.4.1 先序遍历 168

6.4.2 中序遍历 169

6.4.3 后序遍历 169

6.4.4 层序遍历 170

6.5 线索二叉树 171

6.5.1 线索二叉树的定义 171

6.5.2 线索二叉树的类模板定义 173

6.6 二叉树的应用 180

6.6.1 堆 180

6.6.2 哈夫曼树 187

6.7 树和森林的实现 193

6.7.1 树的存储结构 193

6.7.2 树、森林和二叉树的转换 196

6.7.3 树的遍历 198

6.7.4 森林的遍历 199

6.8 等价类及其表示 200

6.8.1 等价关系与等价类 200

6.8.2 并查集 201

习题六 206

第七章 图 210

7.1 图的基本概念 210

7.1.1 图的定义 210

7.1.2 图的术语 211

7.1.3 图的基本操作 213

7.2 图的存储结构 214

7.2.1 邻接矩阵 214

7.2.2 邻接表 221

7.2.3 邻接多重表 230

7.2.4 十字链表 230

7.3 图的遍历与连通性 232

7.3.1 深度优先遍历 232

7.3.2 广度优先遍历 233

7.3.3 连通分量 235

7.4 最小生成树 236

7.4.1 克鲁斯卡尔算法 237

7.4.2 普里姆算法 240

7.5 最短路径 243

7.5.1 弧上权值为非负情形的单源点最短路径问题 243

7.5.2 弧上权值为任意值的单源点最短路径问题 246

7.5.3 所有顶点之间的最短路径 249

7.6 活动网络 251

7.6.1 用顶点表示活动的网络 251

7.6.2 用边表示活动的网络 255

习题七 259

第八章 查找 263

8.1 基本概念 263

8.2 顺序表 264

8.2.1 顺序表的查找 264

8.2.2 有序表的折半查找 265

8.3 索引顺序表和倒排表 269

8.3.1 索引顺序表 269

8.3.2 倒排表 271

8.4 二叉排序树 273

8.4.1 二叉排序树定义 273

8.4.2 二叉排序树上的查找 275

8.4.3 二叉排序树的插入操作 276

8.4.4 二叉排序树的删除 278

8.4.5 二叉排序树查找的性能分析 280

8.5 平衡二叉树 280

8.5.1 平衡二叉树的定义 281

8.5.2 平衡旋转 281

8.5.3 平衡二叉树中插入结点 283

8.5.4 平衡二叉树中删除结点 286

8.6 B-树 288

8.6.1 动态的m路查找树 288

8.6.2 B-树的定义 289

8.6.3 B-树的插入 290

8.6.4 B-树的删除 291

8.6.5 B+树 294

8.7 散列表 295

8.7.1 散列表的基本概念 295

8.7.2 散列函数 296

8.7.3 处理冲突的闭散列方法——开地址方法 298

8.7.4 闭散列方法的实现 302

8.7.5 处理冲突的开散列方法——链地址法 305

8.7.6 散列表分析 306

习题八 307

第九章 排序 311

9.1 基础知识 311

9.2 交换排序 312

9.2.1 冒泡排序 312

9.2.2 快速排序 314

9.3 插入排序 316

9.3.1 直接插入排序 316

9.3.2 折半插入排序 320

9.3.3 希尔排序 320

9.4 选择排序 322

9.4.1 简单选择排序 322

9.4.2 锦标赛排序 325

9.4.3 堆排序 326

9.5 归并排序 329

9.5.1 归并 329

9.5.2 两路归并排序 330

9.5.3 递归的归并排序 332

9.6 基数排序 334

9.6.1 多关键字排序 334

9.6.2 链式基数排序 335

9.7 各种排序方法的选择和使用 338

习题九 338

参考文献 342