《数据结构 C++与面向对象的途径》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:张乃孝,裘宗燕著
  • 出 版 社:北京:高等教育出版社
  • 出版年份:1998
  • ISBN:7040064189
  • 页数:365 页
图书介绍:

第一章 预备知识 1

1.1 C++语言对C的基本扩充 1

1.2 对象和类 6

1.3 类的界面描述和实现 10

1.3.1 类的数据域 11

1.3.2 对象的行为——成员函数 12

1.3.3 运算符作为成员函数 13

1.3.4 用构造函数进行实例的初始化 15

1.3.5 普通运算符 18

1.3.6 普通函数 20

1.4 对象的输入和输出 20

1.5 类的合成、继承和多态性 24

1.5.1 合成 24

1.5.2 继承 27

1.5.3 多态性 28

1.6 面向对象的程序设计* 28

1.6.1 分析阶段 29

1.6.2 设计阶段 30

1.6.3 编码阶段 32

1.6.4 测试和维护 34

1.7 算法分析与设计* 34

小结 38

习题 39

第二章 字符串——数据封装技术 41

2.1 C++语言的字符和字符串 41

2.2 字符串数据抽象的描述和实现 43

2.2.1 字符串类的定义 44

2.2.2 构造函数的定义 46

2.2.3 析构函数 49

2.2.4 基本成员函数的实现 50

2.2.5 比较运算符 54

2.2.6 串连接 56

2.2.7 输入和输出 57

2.3 子串 59

2.4 模式匹配 64

2.4.1 简单字符串匹配 66

2.4.2 Knuth-Morris-Pratt模式匹配算法* 69

2.4.3 Boyer-Moore字符串匹配算法* 73

小结 77

习题 77

第三章 向量——程序重用技术 79

3.1 模板类 80

3.2 向量的实现 82

3.3 程序的重用、定界向量和位向量 85

3.3.1 继承方式的重用:定界向量 86

3.3.2 通过合成方式的重用——位向量 89

3.4 其他向量类型* 94

3.4.1 用枚举类型作为指标 94

3.4.2 矩阵 96

3.5 排序——模板函数 100

3.5.1 插入排序 101

3.5.2 起泡排序 102

3.5.3 选择排序 103

3.5.4 快速排序算法 104

小结 106

习题 107

4.1 遍历器(Iterator) 108

第四章 遍历器——继承和多态性 108

4.1.1 抽象的遍历器类 109

4.1.2 向量遍历器 110

4.2 有序向量和二分法检索 114

4.3 继承和多态——进一步的讨论 117

4.3.1 静态、动态类型和多态性 117

4.3.2 框架和虚函数 119

4.3.3 两类继承 120

4.3.4 对虚函数和普通函数的遮蔽* 121

4.4 多态性的形式和例子* 122

4.4.1 参数多态性——归约 122

4.4.2 切割问题 124

小结 125

习题 126

第五章 动态数据结构——链表 127

5.1 单链表的定义 127

5.1.1 表类 127

5.1.2 链类 129

5.2 单链表的实现 130

5.2.1 链类的实现 130

5.2.2 表类的实现 132

5.3 表遍历器 136

5.3.1 表遍历器类 136

5.4 表的应用:多项式处理* 142

5.4.1 项类 142

5.4.2 多项式类 144

5.5 有序链表 147

5.5.1 有序表类 147

5.5.2 有序表类的实现 148

5.5.3 有序表的应用——表插入排序 149

5.6 其他链表 150

5.6.1 自组织表 150

5.6.2 双端表 151

5.6.3 循环表 152

5.6.4 双链表 152

5.7 可利用空间表 153

小结 155

习题 157

第六章 栈和队列 158

6.1 抽象类栈和队列 158

6.2 栈的实现 159

6.2.1 栈的向量实现 160

6.2.2 栈的链表实现 162

6.3 栈的应用——表达式计算 164

6.3.1 后缀表达式的求值 164

6.3.2 中缀表达式到后缀表达式的转换 167

5.3.2 表遍历器类的实现 167

6.4 队列的实现 169

6.4.1 队列的向量实现 169

6.4.2 用双端表实现队列 171

6.4.3 用循环表实现队列 172

6.5 应用实例——农夫过河问题* 174

6.5.1 广度优先搜索法 176

6.5.2 深度优先搜索法 178

小结 179

习题 180

第七章 树和二叉树 182

7.1 基本概念 183

7.1.1 树 183

7.1.2 二叉树 185

7.1.3 树与二叉树的关系 187

7.2 二叉树的实现 188

7.2.1 二叉树结点类 188

7.2.2 基本二叉树类 191

7.2.3 二叉树的构造 193

7.3 二叉树的周游 195

7.3.1 周游的递归实现 195

7.3.2 通过遍历器实现周游 197

7.3.3 前序周游器类 198

7.3.4 中序周游器类 201

7.3.5 后序周游器类 203

7.3.6 层次周游算法(按宽度方向周游) 205

7.4 二叉树的向量表示 207

7.4.1 二叉树向量表示的一种基本方法 207

7.4.2 记录结构信息的二叉树向量表示 208

7.5 二叉排序树 209

7.6 平衡的二叉排序树 215

7.6.1 AVL树上的操作 215

7.6.1 AVL树的实现* 219

7.7 二叉树的应用——哈夫曼树 227

小结 230

习题 231

第八章 优先队列 233

8.1 优先队列的抽象 233

8.2 堆 236

8.3 堆排序 240

8.4 斜堆 241

8.5 离散事件模拟* 246

8.5.1 模拟类的结构 247

8.5.2 冰淇淋店的模拟 250

8.5.3 随机数* 252

小结 255

习题 255

第九章 散列结构 257

9.1 散列向量 257

9.2 开地址散列 260

9.3 散列表——用桶解决碰撞 263

9.4 散列表遍历器 266

9.5 桶排序 269

9.6 散列函数 270

小结 272

习题 272

第十章 集合与字典 274

10.1 集合及其运算 274

10.2 位向量集合 275

10.2.1 字符集 278

10.2.2 应用——将字符串分解为单词* 279

10.3 集合的表实现 281

10.4 用散列表实现集合 283

10.4.1 应用——拼写检查器* 285

10.5 字典与关联 287

10.6 字典的关联表实现 288

10.7.1 稀疏矩阵 291

10.7 字典的应用 291

10.7.2 索引的实现 295

10.8 用散列表实现字典 297

小结 300

习题 301

第十一章 图 303

11.1 基本概念 303

11.2 图的邻接矩阵表示和Warshall算法 304

11.2.2 图结点的可达性问题 305

11.3 邻接表方式的图表示和深度优先搜索 306

11.3.1 邻接表表示的结点类 306

11.3.2 用深度优先方式求解可达性问题 308

11.4 带权图的矩阵表示和Floyd算法 309

11.4.2 带权图最短路径问题和Floyd算法 310

11.4.1 带权图的邻接矩阵 310

11.5 带权图的邻接表表示与Dijkstra算法 312

11.5.1 带权图的邻接表表示 312

11.5.2 从一个结点出发的最短路径和Dijkstra算法 313

11.6 有限自动机* 315

11.7 拓扑排序 319

小结 320

习题 321

第十二章 文件 323

12.1 外存、文件及其问题 323

12.1.1 外存储器的特点与信息组织 323

12.1.2 文件基本结构和操作 324

12.1.3 文件与字典 325

12.1.4 文件组织 326

12.2 C++的字符流文件及其操作 327

12.3 归并排序 332

12.4 文件的随机访问* 336

12.5 文件索引结构 338

12.5.1 索引向量 339

12.5.2 树形索引结构 339

12.5.3 B树* 341

12.5.4 B+树* 344

小结 346

习题 346

附录A 主要抽象数据类及其相互关系 348

A.1 串及其主要相关类 348

A.2 向量及其主要相关类 349

A.3 表及其主要相关类 349

A.6 优先队列及其主要相关类 350

A.4 栈及其主要相关类 350

A.5 队列及其相关类 350

A.7 树及其主要相关类 351

A.8 散列表及其主要相关类 351

A.9 字典及其主要相关类 352

附录B Borland C++集成开发环境使用入门 353

B.1 概况 353

B.2 启动与退出 353

B.3 菜单与会话框操作 354

B.4 窗口管理 355

B.5 编辑命令 356

B.6 一些主要菜单命令 358

B.7 编程的几个基本步骤 362

参考文献 365