《数据结构 Java版》PDF下载

  • 购买积分:25 如何计算积分?
  • 作  者:(美)福特(Ford,W.H.),(美)托普(Topp,W.K.)著;梁志敏译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2006
  • ISBN:7302135444
  • 页数:970 页
图书介绍:本书从面向对象的角度讲述数据结构的基本理论。

1.1 本书内容 1

1.1.1 动态数组 1

第1章 类与对象 1

1.1.2 链表 2

1.1.3 关联数组 3

1.1.5 适配器结构 4

1.1.4 图 4

1.2 面向对象编程 5

1.1.7 数据结构与算法 5

1.1.6 数据结构与面向对象编程 5

1.3 理解类的概念 7

1.4.1 设计Time24类 8

1.4 Time24类 8

1.4.2 构造函数 9

1.4.3 toString方法 10

1.4.4 Accessor和mutator方法 11

1.5 对象的声明和使用 12

1.4.5 静态方法 12

1.5.1 对象方法的使用 13

1.5.2 引用与别名 14

1.6 一个使用Time24对象的应用程序 15

1.7 类的表示 16

1.8 类的实现 18

1.8.1 Time24类声明 19

1.8.2 私有的工具方法 20

1.8.3 accessor与mutator方法 21

1.8.4 构造函数 22

1.8.7 时间间隔 23

1.8.6 增加时间 23

1.8.5 格式化的对象描述 23

1.9 类的构造 24

1.10 String类 26

1.10.2 串合并 27

1.10.1 串索引 27

1.10.3 串比较 28

1.11 枚举类 29

1.12 总结 32

书面练习 33

编程练习 34

编程项目 36

第2章 类之间的关系 39

2.1.1 Integer对象的比较 40

2.1 wrapper类 40

2.1.2 静态wrapper类成员 41

2.1.3 字符处理 42

2.2 自动装箱与自动拆箱 43

2.3 对象组合 44

2.3.1 TimeCard类 45

2.3.2 TimeCard类的实现 46

2.4 Java中的继承 47

2.3.3 TimeCard类的UML图 47

2.4.1 一个雇员层次结构 48

2.4.2 继承层次结构中成员的可见性 49

2.4.3 Employee类的声明 50

2.4.4 SalaryEmployee子类 51

2.4.5 继承层次结构中的关键字super 52

2.4.6 HourlyEmployee子类 53

2.5 多态性 55

2.6 抽象类 59

2.7.1 throw语句 60

2.7 运行时错误的处理 60

2.7.2 处理异常的try/catch代码块 61

2.7.3 finally子句 62

2.7.5 Java异常的层次结构 63

2.7.4 异常传播 63

2.8 输入与输出 65

2.7.6 标准的异常 65

2.8.1 控制台I/O 66

2.8.3 使用Reader流的文本输入 67

2.8.2 文件I/O 67

2.8.4 输入串的分析 69

2.8.5 使用Writer流的文本输出 71

2.8.6 输出流的控制 72

2.9.2 输入流的读取 73

2.9.1 声明Scanner对象 73

2.9 Scanner类 73

2.9.4 Scanner类API 75

2.9.3 文件输入 75

2.9.5 应用程序:Scanner类的使用 76

2.10 总结 79

书面练习 80

编程练习 83

编程项目 87

3.1 Java接口 89

第3章 类的设计 89

3.2 作为模板的接口 91

3.2.1 使用接口类型 92

3.2.2 接口与继承 94

3.3 使用iavadoc创建API 96

3.4 设计模式 99

3.5 GUI应用程序设计 100

3.5.1 图形组件 101

3.5.2 GUI应用程序设计模式 102

3.5.3 事件侦听器与事件处理程序 105

3.5.4 骰子投掷动作事件 106

3.6 总结 107

编程练习 108

书面练习 108

编程项目 112

4.1 选择排序 115

第4章 算法介绍 115

4.2.1 顺序搜索 119

4.2 简单的搜索算法 119

4.2.2 二叉搜索 121

4.3.2 算法性能:运行时间分析 126

4.3.1 系统/内存性能标准 126

4.3 算法的分析 126

4.3.3 Big-O符号 129

4.3.4 通用数量级 131

4.4 搜索算法的比较 133

书面练习 136

4.5 总结 136

编程练习 138

编程项目 141

第5章 泛型类与方法 143

5.1 Obiect超类 144

5.1.1 对象数组方法 145

5.1.2 通用的顺序搜索 146

5.2 Java泛型介绍 147

5.2.1 基于Object的Store类 148

5.2.2 泛型集合 149

5.2.3 泛型Store类 150

5.3 泛型接口 151

5.4.1 基本的泛型方法 155

5.4 泛型方法 155

5.4.2 为泛型类型使用绑定 156

5.5 泛型与继承 157

5.5.1 被绑定的泛型类型 158

5.5.2 泛型与通配符 160

5.6 泛型搜索/排序算法 161

5.7 总结 164

书面练习 165

编程练习 166

编程项目 168

6.1 递归的概念 171

第6章 递归 171

6.1.2 递归方法的实现 173

6.1.1 描述一个递归算法 173

6.1.3 递归的工作方式 175

6.1.4 多种基数表示法 176

6.2.1 构建一个刻度尺 179

6.2 递归的应用 179

6.2.2 Hanoi塔 181

6.3 递归的评价 185

6.3.1 Fibonacci方法 186

6.4 总结 189

6.3.2 使用递归的标准 189

书面练习 190

编程练习 192

编程项目 194

7.1 插入排序 195

第7章 排序算法 195

7.2.1 归并排序 198

7.2 分治排序算法 198

7.2.2 通用的排序方法 201

7.2.3 msort()方法 202

7.2.4 归并排序的效率 205

7.3.1 使用基准值分割列表 206

7.3 快速排序 206

7.3.2 快速排序递归下降 209

7.3.3 pivotIndex()方法 211

7.3.4 quicksort()方法 213

7.3.5 快速排序的运行时间 215

7.3.6 排序算法的比较 216

7.4 第k大元素的查找 219

7.5 总结 221

书面练习 222

编程练习 223

编程项目 225

8.1 集合介绍 227

第8章 集合类型 227

8.2 集合的概述 229

8.2.1 List集合 230

8.2.2 Set集合 232

8.2.3 Map集合 233

8.2.4 适配器集合 234

8.2.5 Graph集合 235

8.2.6 Java Collections Framework 236

8.3 Bag集合 237

8.3.1 创建和使用一个Bag集合 238

8.3.2 应用:Eratosthenes筛选法 240

8.4 Bag类的实现 243

8.4.1 私有的remove()方法 244

8.4.2 插入和访问方法 245

8.5 总结 246

8.4.3 集合的toString()方法 246

书面练习 247

编程练习 248

编程项目 249

9.1 列表集合 251

第9章 基于数组的列表集合 251

9.2 ArrayList类 255

9.2.1 调整ArrayList的大小 257

9.3.1 ArrayList的连接 259

9.3 ArrayList应用程序 259

9.2.2 ArrayList API 259

9.3.2 closest-pair问题 262

9.4.1 ArrayList类的设计 266

9.4 实现ArrayList类 266

9.4.2 准备更大的容量 267

9.4.3 添加和删除元素 268

9.4.4 实现索引访问 272

9.5 Cloneable对象 273

9.5.1 克隆Time24对象 274

9.5.2 克隆引用变量 275

9.5.3 克隆ArrayList对象 277

9.6 ArrayList集合的评价 279

9.5.4 克隆数组 279

书面练习 280

9.7 总结 280

编程练习 282

编程项目 285

第10章 链表 287

10.1.1 创建链表 289

10.1 单链表 289

10.1.3 定位列表位置 291

10.1.2 扫描链表 291

10.1.5 通用的插入和删除操作 292

10.1.4 更新列表头 292

10.1.6 删除目标节点 294

10.2 双链表 298

10.3 LinkedList集合 299

10.3.1 LinkedList类 300

10.3.2 基于索引的LinkedList方法 301

10.3.3 访问列表尾 302

10.4.1 应用程序:选拔列表 304

10.4 使用LinkedList集合的应用程序 304

10.4.2 应用程序:回文列表 307

10.5 总结 309

书面练习 310

编程练习 313

编程项目 318

11.1 双链表 321

第11章 实现LinkedList类 321

11.1.1 DNode对象 322

11.1.2 使用DNode对象 323

11.2 循环双链表 325

11.2.1 声明双链表 326

11.2.2 更新双链表 327

11.2.3 应用程序:词汇杂乱 330

11.3.1 LinkedList类的私有成员 333

11.3 实现LinkedList类 333

11.3.3 列表中基于索引的访问 335

11.3.2 LinkedList类的构造函数 335

11.3.4 搜索列表 336

11.3.5 修改列表 337

书面练习 339

11.4 总结 339

编程练习 340

编程项目 342

12.1 迭代器的概念 345

第12章 迭代器 345

12.2 集合迭代器 346

12.2.1 迭代器扫描方法 347

12.2.2 通用的迭代器方法 350

12.2.3 使用增强的for语句进行迭代 351

12.3 列表迭代器 352

12.3.1 ListIterator方法set() 353

12.3.2 列表的后向扫描 354

12.3.3 ListIterator方法add() 356

12.3.4 迭代器设计模式 357

12.4.1 有序列表 358

12.4 迭代器的应用 358

12.4.2 删除有序列表中的重复值 360

12.5 OrderedList集合 361

12.5.1 OrderedList类方法 362

12.5.2 应用程序:确定字频 363

12.6 顺序集合的选择 367

12.5.3 适配器设计模式 367

12.7 总结 368

书面练习 369

编程练习 371

编程项目 373

13.1 迭代器实现设计 375

第13章 迭代器的实现 375

13.1.1 迭代器变量 376

13.1.2 迭代器接口方法 377

13.2 LinkedList迭代器 378

13.3.1 列表迭代器构造函数 381

13.3 列表迭代器的实现 381

13.3.2 列表迭代器的公共方法 382

13.4 快速失效迭代器 385

13.5 总结 386

书面练习 387

编程练习 388

编程项目 390

第14章 堆栈 391

14.1 堆栈集合 392

14.2 堆栈的应用 396

14.2.1 多种基数 397

14.2.2 符号对的平衡 400

14.3 递归与运行时堆栈 403

14.4 后缀表达式 405

14.4.1 后缀表达式的求解 406

14.4.2 PostfixEval类 408

14.4.3 evaluate()方法 410

14.5.1 中缀表达式属性 412

14.5 中缀表达式的求解 412

14.5.2 中缀-后缀转换 413

14.6 总结 416

书面练习 417

编程练习 419

编程项目 422

第15章 队列与优先队列 425

15.1 Queue接口 426

15.1.1 创建一个队列集合类 427

15.1.2 应用:队列的调度 428

15.2 基数排序 430

15.3 有界队列 436

15.3.1 BQueue类的设计实现 438

15.3.2 BQueue类的声明 440

15.4 优先队列 441

15.4.1 优先队列接口 442

15.4.2 应用程序:支持服务库 444

15.5.1 对银行的仿真 447

15.5 事件驱动的仿真 447

15.5.2 仿真设计模式 449

15.5.3 BankSimulation类 451

书面练习 457

15.6 总结 457

编程练习 460

编程项目 463

16.1 树结构 465

第16章 二叉树 465

16.1.1 树的相关术语 466

16.1.2 二叉树 468

16.2 二叉树节点 473

16.3.1 递归树遍历 477

16.3 二叉树扫描算法 477

16.3.2 中序扫描算法 478

16.3.3 扫描方法的设计 480

16.3.4 迭代的层序扫描 482

16.3.5 Visitor设计模式 484

16.3.6 Visitor设计模式的使用 486

16.4.1 树高度的计算 489

16.4 树扫描算法的使用 489

16.4.2 复制二叉树 491

16.4.3 清除树 494

16.4.4 显示二叉树 495

16.5 排序的下界(选读) 497

16.6 总结 499

书面练习 500

编程练习 503

编程项目 505

17.1 表达式树 507

第17章 二叉树的应用 507

17.2 迭代的树遍历 512

17.2.1 中序迭代遍历 513

17.2.2 InorderIterator类的实现 515

17.3 Euler回路遍历 518

17.4.1 影像树的构建 521

17.4 绘制二叉树 521

17.4.2 影像树的显示 523

17.5 总结 525

编程练习 526

书面练习 526

编程项目 529

18.1 二叉搜索树 531

第18章 二叉搜索树 531

18.1.1 构建二叉搜索树 532

18.1.2 在二叉搜索树中定位对象 533

18.1.3 删除二叉搜索树节点 535

18.2 STree:一种二叉搜索树类 536

18.3 STree类的实现 540

18.3.1 STree类的私有成员与构造函数 541

18.3.2 插入和定位节点 542

18.3.3 删除节点 544

18.3.4 其他操作 550

18.4 STree迭代器 551

18.3.5 二叉搜索树操作的复杂度 551

书面练习 556

18.5 总结 556

编程练习 558

编程项目 559

第19章 集与映射 561

19.1.1 TreeSet集合 563

19.1 集 563

19.1.2 简单的拼写检查器 565

19.2 集运算符 568

19.2.1 集运算符的实现 569

19.2.2 应用程序:计算机账号的更新 572

19.2.3 使用有序集的操作 574

19.3.1 Map接口 577

19.3 映射 577

19.3.2 有序映射TreeMap 579

19.3.3 应用程序:一个学生时间记录映射 581

19.3.4 应用程序:计算机软件产品 583

19.4.1 键集集合视图 586

19.4 映射集合视图 586

19.4.2 条目集集合视图 588

19.4.3 应用程序:构建词汇索引 591

书面练习 596

19.5 总结 596

编程练习 598

编程项目 602

20.1 TreeSet类的实现 603

第20章 有序集与映射的实现 603

20.2 TreeMap类的实现 604

20.2.1 TreeMap类的设计 607

20.2.2 使用键对条目进行访问 608

20.2.3 更新条目 609

20.3 集合视图的实现 611

20.2.5 TreeSet和TreeMap类中插入和删除操作的复杂度 611

20.2.4 删除条目 611

20.3.1 查看视图 612

20.3.2 实现视图 614

20.3.3 keySet集合视图 615

书面练习 617

20.4 总结 617

编程练习 618

编程项目 621

21.1 散列法 625

第21章 实现映射的散列法 625

21.2.1 Java方法hashCode() 627

21.2 散列函数的设计 627

21.2.2 自定义的散列函数 629

21.3.1 线性探查法 631

21.3 散列表的设计 631

21.3.2 具有不同列表的拉链法 633

21.3.3 再散列 635

21.4 作为集合的散列表 636

21.5 Hash类的实现 637

21.5.1 Hash类的add()和rehash()方法 639

21.5.2 Hash类的remove()方法 641

21.5.3 Hash类迭代器的实现 642

21.6 无序映射集合 645

21.6.1 访问HashMap类中的条目 646

21.6.2 更新HashMap类中的条目 647

21.7 无序集集合 649

21.8 散列表的性能 650

21.9 总结 652

书面练习 653

编程练习 655

编程项目 657

22.1 基于数组的二叉树 661

第22章 堆 661

22.2 Comparator接口 663

22.2.1 通用比较对象 664

22.2.2 通用的数组排序 665

22.3 堆 667

22.3.1 堆的插入操作 668

22.3.2 堆的删除操作 670

22.3.3 堆的显示 674

22.4.1 堆的产生 676

22.4 使用堆进行排序 676

22.4.2 堆排序 679

22.4.3 静态堆方法概述 680

22.5 优先队列的实现 681

书面练习 684

22.6 总结 684

编程练习 687

编程项目 689

23.1 位数组 691

第23章 位数组与文件压缩 691

23.1.1 BitArray类 694

23.1.2 BitArray类的实现 696

23.2 二进制文件 699

23.3 Huffman压缩 703

23.3.1 Huffman树的构建 707

23.3.2 Huffman压缩的实现 708

23.3.3 Huffman解压的实现 714

23.4 序列化 716

23.4.1 对象的序列化 717

23.4.4 应用程序:对象的序列化 718

23.4.3 反序列化对象 718

23.4.2 使类可序列化 718

23.4.5 定制序列化 721

23.5 总结 723

书面练习 724

编程练习 728

编程项目 729

24.1 图的相关术语 731

第24章 图与路径 731

24.1.1 有向图 733

24.1.2 带权图 734

24.2.1 Graph接口 735

24.2 图的创建和使用 735

24.2.2 DiGraph类 737

24.3.1 广度优先搜索算法 741

24.3 图遍历算法 741

24.3.2 深度优先访问算法 746

24.3.3 深度优先搜索算法 751

24.3.4 无环图 753

书面练习 755

24.4 总结 755

编程练习 758

编程项目 761

25.1 拓扑排序 763

第25章 图算法 763

25.1.1 拓扑排序的目的 764

25.1.2 topologicalSort()方法的实现 765

25.2 强连通组件 766

25.2.1 强连通组件算法的工作原理 768

25.2.2 strongComponents()方法的实现 769

25.3 图最优化算法 771

25.4 最短路径算法 772

shortestPath()方法的实现 774

25.5 Dijkstra最小路径算法 777

25.5.1 Dijkstra算法的设计 778

25.5.3 minimumPath()方法的实现 781

25.5.2 Dijkstra算法的工作原理 781

25.5.4 无环图中的最小路径 784

25.6 最小生成树 787

25.6.1 Prim算法 788

25.6.2 minSpanTree()方法的实现 790

书面练习 794

25.7 总结 794

编程练习 796

编程项目 798

26.1 图的表示 799

第26章 图的实现 799

26.2 DiGraph类的组件 800

26.2.1 顶点信息的表示 801

26.2.2 顶点映射与VertexInfo数组列表 803

26.3 DiGraph类设计 806

26.4 DiGraph类方法 807

26.4.2 邻接顶点的标识 808

26.4.1 ArrayList的访问 808

26.4.4 添加边 809

26.4.3 入度和出度的求解 809

26.4.5 删除顶点 810

26.4.6 图算法支持方法 813

26.4.7 图集合视图 814

26.5 总结 815

书面练习 816

编程练习 817

编程项目 819

第27章 平衡的搜索树 821

27.1 AVL树 822

27.2 AVLTree类的实现 824

27.2.1 AVLTree类的add()方法 825

27.2.2 私有的addNode()方法 831

27.2.3 add()方法 832

27.3 2-3-4树 835

27.3.2 2-3-4树中的插入操作 836

27.3.1 2-3-4树的搜索 836

27.4 红-黑树 839

27.4.1 2-3-4树节点的表示 840

27.4.2 2-3-4树的红-黑树表示 841

27.4.4 4-节点的分割 844

27.4.3 在红-黑树中插入节点 844

27.4.5 红-黑树底部的插入操作 848

27.4.6 红-黑树的构建 849

27.4.7 红-黑树的搜索运行时间 850

27.4.8 在红-黑树中删除节点 851

27.5 RBTree类 852

书面练习 855

27.6 总结 855

编程练习 858

编程项目 859

28.1 基本的数论概念 861

第28章 数论与加密 861

28.1.1 Euclid GCD算法 862

28.1.2 模运算 863

28.1.3 Euler φ函数 865

28.2 安全的消息传输 866

28.2.2 使用用于RSA加密的密钥 867

28.2.1 创建用于RSA加密的密钥 867

28.3 大整数的使用 868

28.2.3 如何保护RSA通信 868

28.4 RSA的客户-服务器模式 872

28.5.1 Euclid GCD算法的实现 873

28.5 RSA算法(选读) 873

28.5.2 RSA定理 876

28.6 总结 877

书面练习 878

编程练习 879

编程项目 880

29.1 组合学 881

第29章 杂类算法 881

29.1.1 组合的构建 882

29.1.2 查找所有子集 883

29.1.3 列出置换 885

29.1.4 旅行推销员问题 888

29.2 动态编程 889

29.1.5 置换与TSP 889

29.2.1 由顶向下动态编程 890

29.2.2 使用动态编程的组合 893

29.2.3 由底向上动态编程 894

29.2.4 背包问题 896

29.2.5 Knapsack类 899

29.3 回溯:八皇后问题 903

29.3.1 问题分析 905

29.3.2 程序设计 907

29.3.3 显示棋盘 911

29.4 总结 913

书面练习 914

编程练习 915

编程项目 920

A.1 Java程序的结构 923

附录A Java入门 923

A.1.1 注释 924

A.1.4 控制台输出 925

A.1.3 变量的声明和使用 925

A.1.2 关键字与标识符 925

A.2 Java编程环境 926

A.3.1 数值类型 927

A.3 原始数据类型 927

A.3.2 Java的char类型 929

A.4.1 算术运算符 930

A.4 运算符 930

A.3.3 命名常量的声明 930

A.4.3 复合赋值运算符 931

A.4.2 赋值运算符 931

A.4.5 运算符的优先顺序 932

A.4.4 增量运算符 932

A.5 类型之间的转换 933

A.6 选择语句 935

A.6.1 if语句 937

A.6.2 嵌套的if语句 938

A.6.4 条件表达式运算符 939

A.6.3 多路if/else语句 939

A.6.5 switch语句 940

A.6.6 boolean类型 941

A.7.1 while语句 942

A.7 循环语句 942

A.7.2 do/while语句 943

A.7.3 for语句 944

A.7.4 break语句 945

A.8 数组 946

A.8.2 使用增强的for语句扫描数组 947

A.8.1 数组的初始化 947

A.8.3 二维数组 948

A.9.1 预定义的方法 949

A.9 Java的方法 949

A.9.2 自定义的方法 951

A.9.3 作为方法参数的数组 953

附录B Java关键字 957

附录C ASCII字符编码 959

附录D Java操作符的优先顺序 961

E.1 安装EZJava 963

附录E EZJava集成开发环境 963

E.2 启动EZJava 964

E.2.1 创建新文档 965

E.3 程序的编译和运行 966

E.2.2 菜单选项 966

E.4 项目的使用 968