当前位置:首页 > 工业技术
数据结构 用面向对象方法与C++描述
数据结构 用面向对象方法与C++描述

数据结构 用面向对象方法与C++描述PDF电子书下载

工业技术

  • 电子书积分:14 积分如何计算积分?
  • 作 者:殷人昆等编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:1999
  • ISBN:7302034052
  • 页数:402 页
图书介绍:数据结构是计算机专业的核心课程,是从事计算机软件开发、应用人员应当必备的专业基础。随着计算机的日益普及,简单的数据结构知识已经下放到中学的计算机课程中,并已成为计算机软件考试的必考课程之一。本书是根据作者在北京清华大学及美国密西根州GrandValley州立大学多年教学的经验,并参考了近年出版的多种国外大学数据结构和面向对象软件工程教科书编写的。内容包括:数组、链接表、栈和队列、递归、树与森林、图、堆与优先级队列、集合与搜索结构、排序、索引结构与散列等。书中采用面向对象的观点讨论数据结构技术,并以兼有面向过程和面向对象双重特色的C++语言作为算法的描述工具,强化基本知识和基本能力的双基训练。全书条理清晰,通俗易懂,图文并茂,适于自学。 本书适合作大专院校中计算机或软件专业的教材,也可供计算机软件人员和计算机用户阅读。
《数据结构 用面向对象方法与C++描述》目录

第1章 绪论 1

1.1 什么是数据结构 2

1.2 抽象数据类型及面向对象概念 4

1.2.1 数据类型 4

1.2.2 数据抽象与抽象数据类型(ADTs:Abstract Data Types) 4

1.2.3 面向对象的概念 5

1.2.4 用于描述数据结构的语言 7

1.3 数据结构的抽象层次 7

1.4.1 C++的函数特征 9

*1.4 用C++描述面向对象程序 9

1.4.2 C++的数据声明 10

1.4.3 C++的作用域 11

1.4.4 C++的类 11

1.4.5 C++中的对象 13

1.4.6 C++的输入输出 13

1.4.7 C++中的函数 15

1.4.8 C++中的参数传递 15

1.4.9 C++中的函数名重载和操作符重载 16

1.4.10 C++中的动态存储分配 17

1.4.11 友元(friend)函数 18

1.4.12 内联(inline)函数 18

1.4.13 结构(struct)与类 18

1.4.14 联合(Union)与类 19

1.5 算法定义 19

1.6 模板(template) 20

1.7.1 算法的性能标准 23

1.7 性能分析与度量 23

*1.7.2 算法的后期测试 24

1.7.3 算法的事前估计 26

1.7.4 空间复杂度度量 26

1.7.5 时间复杂度度量 27

1.7.6 时间复杂度的渐进表示法 31

1.7.7 渐进的空间复杂度 34

习题 34

2.1.1 在C++中数组的定义和初始化 37

第2章 数组 37

2.1 作为抽象数据类型的数组 37

2.1.2 作为抽象数据类型的数组 38

2.1.3 数组的顺序存储方式 40

2.2 顺序表 42

2.2.1 顺序表的定义和特点 43

2.2.2 顺序表的类定义 43

2.2.3 顺序表的查找、插入和删除 45

2.2.4 作为抽象数据类型,使用顺序表的事例 47

*2.3 多项式抽象数据类型 47

2.3.1 多项式抽象数据类型 48

2.3.2 多项式的表示 49

2.3.3 多项式的相加 51

2.4 稀疏矩阵 53

2.4.1 稀疏矩阵的抽象数据类型 53

2.4.2 稀疏矩阵的压缩表示 53

*2.4.3 稀疏矩阵的转置 54

*2.4.4 稀疏矩阵相乘 57

2.5 字符串 59

2.5.1 字符串抽象数据类型和类定义 59

2.5.2 字符串操作的实现 61

2.5.3 字符串的模式匹配 63

*2.5.4 模式匹配的改进算法——KMP(D.E.Knuth -J.H.Morris—V.R.Pratt)算法 64

习题 68

第3章 链表 71

3.1 单链表(Singly Linked List) 71

3.1.1 单链表的结构 71

3.1.2 单链表的类定义 72

3.1.3 单链表中的插入与删除 73

3.3.4 带表头结点的单链表 75

3.3.5 用模板定义的单链表类 76

3.3.6 单链表的游标(Iterator)类 79

3.3.7 静态链表 81

3.2.1 循环链表的类定义 82

3.2 循环链表 82

3.2.2 用循环链表求解约瑟夫问题 83

*3.3 多项式及其相加 84

3.3.1 多项式的类定义 84

3.3.2 多项式的加法 85

3.4 双向链表 87

3.5 稀疏矩阵 92

3.5.1 稀疏矩阵的类定义 92

3.5.2 稀疏矩阵的建立 94

3.5.3 删除稀疏矩阵 95

3.6 C++中的虚函数和动态联编 96

3.6.1 C++中的继承(inheritance) 96

3.6.2 基类与派生类对象指针的转换 97

3.6.3 虚函数(virtual function) 99

3.6.4 纯虚函数和抽象基类 99

3.6.5 多态性(polymorphism)和动态联编 99

习题 101

4.1.1 栈的抽象数据类型 103

第4章 栈和队列 103

4.1 栈 103

4.1.2 栈抽象数据类型的顺序存储表示与实现——顺序栈 104

4.1.3 栈抽象数据类型的链接存储表示——链式栈 106

*4.2 表达式的计算(Expression Evaluation) 107

4.2.1 表达式 107

4.2.2 应用后缀表示计算表达式的值 108

4.2.3 中缀表达式转换为后缀表达式 111

4.3 队列 113

4.3.1 队列的抽象数据类型 113

4.3.2 队列的顺序存储表示——循环队列 114

4.3.3 队列的链接存储表示——链式队列 116

4.3.4 队列的应用举例—打印二项展开式(a+b)j的系数 118

4.4 优先级队列(Priority Queue) 119

4.4.1 优先级队列的定义 119

4.4.2 优先级队列的存储表示和实现 120

*4.5 事件驱动模拟(Event-Driven Simulation) 121

习题 130

第5章 递归(RECURVE) 132

5.1 递归的概念 132

5.2 迷宫问题 135

5.3 递归过程与递归工作栈 138

*5.4 利用栈实现的迷宫问题非递归解法 142

5.5 广义表(General Lists) 145

5.5.1 广义表的概念 146

5.5.2 广义表的表示及操作 147

5.5.3 广义表存储结构的实现 149

5.5.4 广义表的访问算法 151

5.5.5 广义表的递归算法 153

*5.5.6 三元多项式的表示 159

习题 161

6.1.2 树的术语 163

6.1.1 树的定义 163

6.1 树与森林的概念 163

第6章 树与森林 163

6.1.3 树的抽象数据类型 164

6.2 二叉树(Binary Tree) 165

6.2.1 二叉树的定义 165

6.2.2 二叉树的性质 166

6.2.3 二叉树的抽象数据类型 167

6.3.1 数组表示 168

6.3 二叉树的表示 168

6.3.2 链表存储表示 169

6.4 二叉树遍历(Binary Tree Traversal) 172

6.4.1 中序遍历(Inorder Traversal) 173

6.4.2 前序遍历(preorder Traversal) 173

6.4.3 后序遍历(Postorder Traversal) 174

6.4.4 应用二叉树遍历的事例 175

*6.4.5 二叉树遍历的游标类(Tree Iterator) 177

6.5.1 线索(Thread) 182

*6.5 线索化二叉树(Threaded Binary Tree) 182

*6.4.6 不用栈的二叉树中序遍历算法 182

6.5.2 中序线索化二叉树 183

6.5.3 前序与后序的线索化二叉树 188

6.6 堆(Heap) 189

6.6.1 堆的定义 190

6.6.1 堆的建立 191

6.6.3 堆的插入与删除 192

6.7 树与森林 194

6.7.1 树的存储表示 194

6.7.2 森林与二叉树的转换 199

6.7.3 树的遍历 200

6.7.4 森林的遍历 202

*6.8 二叉树的计数 203

6.9 霍夫曼树(Huffman Tree) 206

6.9.1 路径长度(Path Length) 206

6.9.2 霍夫曼树 207

9.9.3 霍夫曼编码 209

习题 210

第7章 集合与搜索 212

7.1 集合及其表示 212

7.1.1 集合基本概念 212

7.1.2 以集合为基础的抽象数据类型 213

7.1.3 用位向量实现集合抽象数据类型 213

7.1.4 用有序链表实现集合的抽象数据类型 215

7.2 等价类和并查集 219

7.2.1 等价关系与等价类 219

7.2.2 确定等价类的链表方法 220

7.2.3 并查集 222

7.3 静态搜索结构 227

7.3.1 搜索的概念 227

7.3.2 静态搜索结构 228

7.3.3 顺序搜索 229

7.3.4 基于有序顺序表的折半搜索 231

*7.3.5 基于有序顺序表的斐波那契搜索和插值搜索 234

7.4 二叉搜索树 235

7.4.1 定义 235

7.4.2 二叉搜索树上的搜索 237

7.4.3 二叉搜索树的插入 238

7.4.4 二叉搜索树的删除 239

*7.4.5 与二叉搜索树相关的中序游标类 240

*7.5 最优二叉搜索树 242

7.5.1 扩充二叉搜索树 242

7.5.2 最优二叉搜索树 243

7.6 AVL树 247

7.6.1 AVL树的定义 247

7.6.2 平衡化旋转 248

7.6.3 AVL树的插入和删除 252

7.6.4 AVL树的高度 255

习题 256

8.1.1 图的基本概念 259

8.1 图的基本概念 259

第8章 图 259

8.1.2 图的抽象数据类型 261

8.2 图的存储表示 262

8.2.1 邻接矩阵 262

8.2.2 邻接表 265

8.2.3 邻接多重表 269

8.3 图的遍历与连通性 270

8.3.1 深度优先搜索 271

8.3.2 广度优先搜索 272

8.3.3 连通分量 273

8.3.4 重连通分量 274

8.4 最小生成树 277

8.4.1 克鲁斯卡尔(Kruskal)算法 278

8.4.2 普里姆(Prim)算法 280

8.5 最短路径 283

8.5.1 边上权值非负情形的单源最短路径问题 283

*8.5.2 边上权值为任意值的单源最短路径问题 286

8.5.3 所有顶点之间的最短路径 288

8.6 活动网络 290

8.6.1 用顶点表示活动的网络 290

8.6.1 用边表示活动的网络 294

习题 298

第9章 排序 301

9.1 概述 301

9.2 插入排序 303

9.2.1 直接插入排序 303

9.2.2 折半插入排序 304

9.2.3 链表插入排序 305

9.2.4 希尔排序 307

9.3 交换排序 309

9.3.1 起泡排序 309

9.3.2 快速排序 310

9.4 选择排序 312

9.4.2 锦标赛排序 313

9.4.1 直接选择排序 313

9.4.3 堆排序 317

9.5 归并排序 318

9.5.1 归并 318

9.5.2 迭代的归并排序算法 319

9.5.3 递归的表归并排序 321

*9.6 基数排序 323

9.6.1 多关键码排序 323

9.6.2 链式基数排序 324

9.7 外排序 326

9.7.1 外排序的基本过程 326

9.7.2 k路平衡归并 329

9.7.3 初始归并段的生成 333

*9.7.4 并行操作的缓冲区处理 337

9.7.5 最佳归并树 339

习题 341

10.1.1 线性索引 344

10.1 静态索引结构 344

第10章 索引结构与散列 344

10.1.2 倒排表 346

10.1.3 m路静态搜索树 347

10.2 动态索引结构 348

10.2.1 动态的m路搜索树 348

10.2.2 B_树 350

10.2.3 B_树的插入 352

10.2.4 B_树的删除 354

10.2.5 B+树 358

*10.3 Trie树 361

10.3.1 Trie树的定义 361

10.3.2 Trie树的搜索 362

10.3.3 在Trie树上的插入和删除 363

10.4 散列(Hashing) 364

10.4.1 词典(Dictionary)的抽象数据类型 364

10.4.3 散列函数 365

10.4.2 散列表与散列方法 365

10.4.4 处理溢出的闭散列方法 369

10.4.5 处理溢出的开散列方法——链地址法 376

10.4.6 散列表分析 378

*10.5 可扩充散列 379

10.5.1 二叉Trie树 379

10.5.2 将二叉Trie树转换为目录 380

10.5.3 插入与目录扩充 383

10.5.4 删除与目录收缩 385

10.5.5 性能分析 386

习题 388

附录 实习要求与实习报告 391

实习1 栈和队列 396

实习2 串(内容:全屏幕文本编辑器) 396

实习3 树(内容:作业调度) 398

实习4 图(内容:某公园导游图) 399

实习5 查找、排序(内容:简单的职工管理系统) 399

参考文献 401

相关图书
作者其它书籍
返回顶部