数据结构与算法(Java版)

数据结构与算法(Java版)
作 者: 杜兰克
出版社: 清华大学
丛编项: 国外经典教材·计算机科学与技术
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: 数据结构
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  本书提供作译者介绍Peter Drake是俄勒冈州波特兰市路易斯-克拉克学院计算机科学的助理教授-他的兴趣包括数据结构和人工智能。研究范围包括机器学习,它适用于经典的亚洲游戏Go。...

内容简介

本书提供了学习经典数据结构和算法的新方法。通过带有完整工作代码的详细示例清晰、透彻地解释了全书内容。掷骰子、纸牌和棋盘游戏提供了大量新颖、迷人的示例。本书首先透彻介绍了面向对象程序设计。利用这些工具,读者可以深入探究线性数据结构、算法(包括渐近表示法和递归)、树、集合和高级主题,如图和内存管理。本书主要特点:在全书中使用Java 1.5的新特性,如泛型类型;使用行业标准统一建模语言来绘制类图和实例图;包含数百个习题、复习题和项目;本书给出了所有代码半均可在线获得。

图书目录

第I部分 面向对象程序设计

第1章 封装

1.1 软件开发 2

1.1.1 良好的程序 2

1.1.2 封装 3

1.1.3 软件开发周期 5

习题 6

1.2 类和对象 7

1.2.1 类 7

1.2.2 对象、字段和方法 8

1.2.3 构造函数 9

1.2.4 访问器、修改器和this 11

1.2.5 静态与非静态 12

1.2.6 完成Die类 13

习题 14

1.3 使用对象 14

1.3.1 Beetle类 14

1.3.2 toString()方法 15

1.3.3 BeetleGame类 19

习题 24

1.4 小结 24

1.5 术语 25

1.6 复习题 26

1.7 项目 27

第2章 多态性

2.1 引用类型 29

2.1.1 null 30

2.1.2 引用和相等性 30

2.1.3 多态类型对象 31

2.1.4 基本类型和包装器 33

2.1.5 String 33

习题 34

2.2 数组 34

2.2.1 声明、分配和初始化 34

2.2.2 多维数组 35

2.2.3 示例:Domineering 37

习题 42

2.3 接口 43

习题 47

2.4 重载 47

习题 48

2.5 小结 48

2.6 术语 49

2.7 复习题 50

2.8 项目 50

第3章 继承

3.1 扩展类 53

3.1.1 多态性和继承 55

3.1.2 继承链 57

3.1.3 is-a和has-a 58

习题 60

3.2 Object类 61

3.2.1 Object类的方法 61

3.2.2 隐式构造函数 62

习题 62

3.3 包和访问级别 63

访问级别 64

习题 65

3.4 小结 65

3.5 术语 66

3.6 复习题 66

3.7 项目 66

第Ⅱ部分 线 性 结 构

第4章 栈和队列

4.1 Stack接口 70

4.1.1 泛型 71

4.1.2 示例:Idiot's Delight 72

习题 77

4.2 调用栈 78

习题 80

4.3 异常 80

习题 86

4.4 Queue接口 86

习题 91

4.5 小结 91

4.6 术语 91

4.7 复习题 92

4.8 项目 93

第5章 基于数组的结构

5.1 收缩和加长数组 95

5.1.1 Card类 96

5.1.2 收缩数组 97

5.1.3 加长数组 100

习题 101

5.2 实现栈和队列 101

5.2.1 ArrayStack类 101

5.2.2 ArrayQueue类 103

习题 105

5.3 List接口 106

5.3.1 接口 106

5.3.2 ArrayList类 107

习题 110

5.4 迭代器 111

5.4.1 Iterator接口 111

5.4.2 Iterable接口 112

5.4.3 ArrayIterator类 112

5.4.4 示例:Go Fish 114

习题 120

5.5 初识Java集合框架 121

抽象类 121

习题 122

5.6 小结 123

5.7 术语 123

5.8 复习题 123

5.9 项目 124

第6章 链表结构

6.1 表节点 125

习题 128

6.2 栈和队列 128

6.2.1 LinkedStack类 128

6.2.2 LinkedQueue类 131

习题 133

6.3 LinkedList类 134

6.3.1 Predecessor接口 136

6.3.2 两指算法 138

6.3.3 ListIterator类 139

习题 140

6.4 再论Java集合框架 141

习题 142

6.5 小结 142

6.6 术语 142

6.7 复习题 143

6.8 项目 143

第Ⅲ部分 算法

第7章 算法分析

7.1 计时 146

习题 148

7.2 渐近表示法 148

习题 152

7.3 统计步骤数 153

习题 157

7.4 最好、最坏和平均情况 157

习题 158

7.5 平摊分析 159

习题 160

7.6 小结 160

7.7 术语 161

7.8 复习题 161

7.9 项目 162

第8章 查找和排序

8.1 线性查找 163

习题 164

8.2 折半查找 164

8.2.1 折半查找分析 165

8.2.2 假定n是2的幂 166

习题 167

8.3 插入排序 167

习题 169

8.4 Comparable接口 170

习题 173

8.5 排序链表 173

习题 174

8.6 小结 174

8.7 术语 175

8.8 复习题 175

8.9 项目 176

第9章 递归

9.1 递归地思考 177

习题 183

9.2 分析递归算法 183

习题 186

9.3 归并排序 186

归并排序分析 189

习题 189

9.4 快速排序 190

快速排序分析 192

习题 193

9.5 避免递归 193

9.5.1 尾部递归 194

9.5.2 动态规划 195

习题 197

9.6 小结 197

9.7 术语 198

9.8 复习题 198

9.9 项目 200

第Ⅳ部分 树和集合

第10章 树

10.1 二叉树 202

10.1.1 有关树的术语 203

10.1.2 实现二叉树 205

习题 208

10.2 树的遍历 210

习题 213

10.3 广义树 213

10.3.1 表示广义树 214

10.3.2 示例:智能的Tic Tac Toe玩家 215

习题 221

10.4 小结 221

10.5 术语 221

10.6 复习题 223

10.7 项目 223

第11章 集合

11.1 Set接口 224

习题 229

11.2 有序表 230

11.2.1 查找 232

11.2.2 插入 233

11.2.3 删除 233

习题 234

11.3 二叉查找树 234

11.3.1 查找 235

11.3.2 插入 236

11.3.3 删除 238

习题 241

11.4 散列表 242

11.4.1 直接定址法 242

11.4.2 散列函数和散列码 244

11.4.3 冲突解决方法 245

11.4.4 查找 248

11.4.5 插入 249

11.4.6 删除 250

习题 250

11.5 再论Java集合框架 251

映射 252

习题 252

11.6 小结 253

11.7 术语 253

11.8 复习题 254

11.9 项目 255

第Ⅴ部分 高 级 主 题

第12章 高级线性结构

12.1 位向量 258

BitSet 264

习题 264

12.2 稀疏数组 265

习题 267

12.3 多维数组的连续表示法 267

习题 271

12.4 高级查找和排序 271

12.4.1 插值查找 271

12.4.2 比较排序的下界 273

12.4.3 桶排序 273

习题 275

12.5 小结 275

12.6 术语 276

12.7 复习题 276

12.8 项目 276

第13章 字符串

13.1 String和StringBuilder 277

习题 280

13.2 字符串匹配 280

13.2.1 朴素的字符串匹配 282

13.2.2 RK指纹识别算法 283

13.2.3 KMP跳跃算法 285

习题 289

13.3 小结 289

13.4 术语 290

13.5 复习题 290

13.6 项目 291

第14章 高级主题

14.1 堆 292

14.1.1 优先级队列 294

14.1.2 堆排序 296

14.1.3 Java的PriorityQueue类 297

习题 298

14.2 不相交集合簇 298

14.2.1 按高度合并 300

14.2.2 路径压缩 301

习题 302

14.3 数字查找树 302

习题 308

14.4 红黑树 308

14.4.1 红黑树的性质 308

14.4.2 查找 309

14.4.3 插入 309

14.4.4 删除 311

14.4.5 实现 312

习题 320

14.5 小结 320

14.6 术语 321

14.7 复习题 321

14.8 项目 321

第15章 图

15.1 术语 323

习题 327

15.2 表示法 327

习题 332

15.3 图的遍历 332

习题 334

15.4 拓扑排序 335

习题 339

15.5 最短路径 339

15.5.1 Dijkstra的单源点算法 340

15.5.2 Floyd-Warshall所有顶点对算法 341

习题 342

15.6 最小生成树 342

习题 346

15.7 小结 346

15.8 术语 346

15.9 复习题 348

15.10 项目 348

第16章 内存管理

16.1 显式内存管理 350

16.1.1 自由表 352

16.1.2 使用节点池 356

习题 358

16.2 自动内存管理 358

16.2.1 引用计数 358

16.2.2 标记和清理无用单元收集 359

16.2.3 复制无用单元收集 359

习题 365

16.3 小结 366

16.4 术语 366

16.5 复习题 367

16.6 项目 367

第17章 输出到磁盘

17.1 与文件交互 368

17.1.1 文本文件 368

17.1.2 数据文件 372

习题 376

17.2 压缩 376

17.2.1 霍夫曼编码方式 376

17.2.2 Lempel-Ziv编码方式 381

习题 384

17.3 外部排序 384

习题 389

17.4 B树 389

17.4.1 查找 390

17.4.2 插入 390

17.4.3 删除 391

17.4.4 实现 392

习题 404

17.5 小结 405

17.6 术语 405

17.7 复习题 406

17.8 项目 406

第Ⅵ部分 附 录

附录A Java知识回顾

A.1 第一个程序 408

A.2 变量和类型 410

A.3 循环 412

A.4 与用户交互 414

A.5 分支 414

A.6 方法和中断 417

A.7 常量 418

A.8 运算符 420

A.9 调试 423

A.10 编码约定 424

附录B 统一建模语言

B.1 类图 428

B.2 实例图 431

附录C 求和公式

C.1 求和符号 433

C.2 常量求和 434

C.3 前n个整数之和 434

C.4 二等分与加倍之和 435

C.5 函数之和的上限 435

C.6 常数因子 436

附录D 进一步的阅读材料

D.1 数据结构和算法 437

D.2 Java 437

D.3 游戏 437