数据结构与问题求解:Java版 英文版

数据结构与问题求解:Java版 英文版
作 者: Mark Allen Weiss
出版社: 电子工业出版社
丛编项: 国外计算机科学教材系列
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: Java
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  MarkAllenWeiss的普林斯顿大学获得计算机科学博士学位现任佛罗里达国际大学计算机科学学院教授。他在研究的内容包括数据结构、算法及教育,因他的数据结构教科书而闻名。本书受到高度称赞,并被世界各地的上百所大学所彩。他现任高级计算机科学发展委员会主席。相关图书支持向量机导论离散数学:第五版智能系统:结构、设计与控制网络分析、体系结构与设计(第二版)数据库设计、应用开发与管理(第二版)计算机系统设计与结构(第二版)软件设计:从程序设计到体系结构可变目标C编译器:设计与实现数据库系统:设计、实现与管理第三版(英文版)类型和程序设计语言并行计算机互连网络技术:一种工程方法模式识别(第二版)可计算性与数理逻辑虚拟现实技术(第二版)非线性系统(第三版)Java大学基础教程(第六版)(英文版)Java程序设计教程(第四版)C++大学简明教程:实例程序设计C++大学教程:第4版现代数据库管理(第七版)计算机安全学导论..操作系统基础教程C++编程导论人机交互:第二版密码学基础(第二卷):基础应用非线性控制系统(第三版)数字与微处理器基础——理论与应用器(第四版)数值方法:第四版算法引论:一种创造性方法交互设计:超越人机交互软件需求计算机文化

内容简介

通过重点考虑抽象思考及问题的求解,本书提供了对数据结构及算法的实际介绍。畅销书作教授MarkAllenWeiss独辟蹊径,清晰地分离了数据结构的接口及实现。计税针在本书的第二部分学习数据结构的接口及运行时间,以及在各种实际例子中如何使用数据结构。在这之后的第四部分中,Weiss教授介绍了数据结构的实现。通过熟悉接口及使用数据结构,读者将能够更加抽象地思考各种数据结构的功能以及潜在的功效。MarkAllenWeiss的普林斯顿大学获得计算机科学博士学位现任佛罗里达国际大学计算机科学学院教授。他在研究的内容包括数据结构、算法及教育,因他的数据结构教科书而闻名。本书受到高度称赞,并被世界各地的上百所大学所彩。他现任高级计算机科学发展委员会主席。本书使用流行的Java语言作为描述语言,详细介绍了数据结构和算法。全书共分为五大部分。第一部分的Java教程是全书的基础,具体讲述Java的运行环境、数据类型和运算符、基本语法等;同时介绍了面向对象的一些概念?5诙糠侄訨ava应用程序接口集(API)中的各种数据结构接口和其中涉及到的算法及算法分析进行了详细介绍,并用实例说明了如何使用这些数据结构。第三部分是这些数据结构在实际中的应用,每一章对不同应用的理论和具体实现做了详尽阐述。第四部分则是针对第6章应用程序接口集中介绍过的各种数据结构接口,分别给予更加细致的实例解说。第五部分介绍了一些高级的数据结构。通过对本书的学习,读者能够抽象地思考不同数据结构的功能,了解它们之间的相关性,掌握在计算机工程中使用这些数据结构的能力。本书概念清楚,逻辑性强,内容新颖,可作为高等院校计算机软件专业与计算机应用专业学生的双语教材和参考用书,也可供计算机工程技术人员参考。

图书目录

PART I: TOUR OF JAVA

CHAPTER 1 Primitive Java 3

1.1 The General Environment 4

1.2 The First Program 5

1.2.1 Comments 5

1.2.2 main 6

1.2.3 Terminal Output 6

1.3 Primitive Types 6

1.3.1 The Primitive Types 6

1.3.2 Constants 7

1.3.3 Declaration and Initialization of Primitive Types

1.3.4 Terminal Input and Output 8

1.4 Basic Operators 8

1.4.1 Assignment Operators 9

1.4.2 Binary Arithmetic Operators 10

1.4.3 Unary Operators l0

1.4.4 Type Conversions 10

1.5 Conditional Statements 11

1.5.1 Relational and Equality Operators 11

1.5.2 Logical Operators 12

1.5.3 The if Statement 13

1.5.4 The while Statement 14

1.5.5 The for Statement 14

1.5.6 The do Statement 15

1.5.7 break and continue 16

1.5.8 The switch Statement 17

1.5.9 The Conditional Operator 17

1.6 Methods 18

1.6.1 Overloading of Method Names 19

1.6.2 Storage Classes 20

Summary 20

Objects of the Game 20

Common Errors 22

On the Internet 23

Exercises 23

References 25

CHAPTER 2 Reference Types 27

2.1 What Is a Reference? 27

2.2 Basics of Objects and References 30

2.2.1 TheDotOperator(.) 30

2.2.2 Declaration of Objects 30

2.2.3 Garbage Collection 31

2.2.4 The Meaning of= 32

2.2.5 Parameter Passing 33

2.2.6 The Meaning of== 33

2.2.7 No Operator Overloading for Objects 34

2.3 Strings 35

2.3.1 Basics of String Manipulation 35

2.3.2 String Concatenation 35

2.3.3 Comparing Strings 36

2.3.4 Other Stri no Methods 36

2.3.5 Converting Other Types of Strings 37

2.4 Arrays 37

2.4.1 Declaration, Assignment, and Methods 38

2.4.2 Dynamic Array Expansion 40

2.4.3 ArrayList 43

2.4.4 Multidimensional Arrays 45

2.4.5 Command-line Arguments 45

2.5 Exception Handling 47

2.5.1 Processing Exceptions 47

2.5.2 The finally Clause 47

2.5.3 Common Exceptions 49

2.5.4 The throw and throws Clauses 50

2.6 Input and Output 50

2.6.1 Basic Stream Operations 51

2.6.2 The 5tringl0kenizer Type 52

2.6.3 Sequential Files 53

Summary 55

Objects of the Game 57

Common Errors 58

On the Internet 59

Exercises 59

References 60

CHAPTER 3 Objects and Classes 61

3.1 What Is Object-Oriented Programming? 61

3.2 A Simple Example 63

3.3 Javadoc 65

3.4 Basic Methods 68

3.4.1 Constructors 68

3.4.2 Mutators and Accessors 68

3.4.3 OutputandtOString 70

3.4.4 equals 70

3.4.5 main 70

3.4.6 Static Fields and Methods 71

3.5 Additional Constructs 71

3.5.1 The this Reference 71

3.5.2 The this Shorthand for Constructors 72

3.5.3 The i nstance0f Operator 72

3.5.4 Instance Members vs. Static Members 73

3.5.5 Static Fields and Methods 73

3.5.6 Static Initializers 74

3.6 Packages 76

3.6.1 The import Directive 76

3.6.2 The package Statement 78

3.6.3 The CLASSPATH Environment Variable 78

3.6.4 Package Visibility Rules 79

3.7 A Design Pattern: Composite (Pair) 80

Summary 81

Objects of the Game 83

Common Errors 84

On the Internet 85

Exercises 85

References 88

CHAPTER 4 Inheritance 89

4.1 What Is Inheritance? 90

4.1.1 Creating New Classes 90

4.1.2 Type Compatibility 95

4.1.3 Dynamic Binding and Polymorphism 96

4.1.4 Inheritance Hierarchies 97

4.1.5 Visibility Rules 97

4.1.6 The Constructor and super 98

4.1.7 fi nal Methods and Classes 99

4.1.8 Overriding a Method 100

4.1.9 Type Compatibility Revisited 101

4.2 Designing Hierarchies 103

4.2.1 Abstract Methods and Classes 107

4.3 Multiple Inheritance 109

4.4 The Interface 110

4.4.1 Specifying an Interface 110

4.4.2 Implementing an Interface 111

4.4.3 Multiple Interfaces 112

4.4.4 Interfaces are Abstract Classes 112

4.5 Fundamental Inheritance in Java 113

4.5.1 The Object Class 113

4.5.2 The Hierarchy of Exceptions 113

4.5.3 I/O: The Decorator Pattern 113

4.6 Implementing Generic Components 118

4.6.1 Using Object for Genericity 119

4.6.2 Wrappers for Primitive Types 120

4.6.3 Adapters: Changing an Interface 120

4.6.4 Using Interface Types for Genericity 123

4.7 The Functor (Function Objects) 125

4.7.1 Nested Classes 128

4.7.2 Local Classes 129

4.7.3 Anonymous Classes 130

4.8 Dynamic Binding Details 131

Summary 135

Objects of the Game 136

Common Errors 138

On the Internet 138

Exercises 140

References 144

PART II: ALGORITHMS AND BUILDING BLOCKS

CHAPTER 5 Algorithm Analysis 147

5.1 What Is Algorithm Analysis? 148

5.2 Examples of Algorithm Running Times 151

5.3 The Maximum Contiguous Subsequence Sum Problem 153

5.3.1 The Obvious O(N 3) Algorithm 154

5.3.2 An Improved O(N 2) Algorithm 157

5.3.3 A Linear Algorithm 158

5.4 General Big-Oh Rules 160

5.5 The Logarithm 164

5.6 Static Searching Problem 167

5.6.1 Sequential Search 167

5.6.2 Binary Search 168

5.6.3 Interpolation Search 170

5.7 Checking an Algorithm Analysis 171

5.8 Limitations of Big-Oh Analysis 173

Summary 174

Objects of the Game 174

Common Errors 175

On the Internet 175

Exercises 176

References 181

CHAPTER 6 The Collections APl 183

6.1 Introduction 184

6.2 The Iterator Pattern 185

6.2.1 Basic Iterator Design 186

6.2.2 Inheritance-based Iterators and Factories 188

6.3 Collections API: Containers and Iterators 190

6.3.1 The Collection Interface 190

6.3.2 Iterator Interface 193

6.4 Generic Algorithms 195

6.4.1 C0mparator Function Objects 195

6.4.2 The Collections Class 195

6.4.3 Binary Search 198

6.4.4 Sorting 199

6.5 The List Interface 199

6.5.1 The Listlterat0r Interface 201

6.5.2 kinkedLiist Class 202

6.6 Stacks and Queues 205

6.6.1 Stacks 205

6.6.2 Stacks and Computer Languages 206

6.6.3 Queues 208

6.6.4 Stacks and Queues in the Collections API 208

6.7 Sets 209

6.7.1 ThelreeSet Class 210

6.7.2 The HashSet Class 211

6.8 Maps 216

6.9 Priority Queues 220

Summary 224

Objects of the Game 225

Common Errors 226

On the Internet 226

Exercises 227

References 230

CHAPTER 7 Recursion 231

7.1 What Is Recursion? 232

7.2 Background: Proofs by Mathematical Induction 233

7.3 Basic Recursion 235

7.3.1 Printing Numbers in Any Base 237

7.3.2 Why It Works 239

7.3.3 How It Works 241

7.3.4 Too Much Recursion Can Be Dangerous 242

7.3.5 Preview of Trees 243

7.3.6 Additional Examples 244

7.4 Numerical Applications 248

7.4.1 Modular Arithmetic 250

7.4.2 Modular Exponentiation 250

7.4.3 Greatest Common Divisor and Multiplicative Inverses 252

7.4.4 The RSA Cryptosystem 254

7.5 Divide-and-Conquer Algorithms 257

7.5.1 The Maximum Contiguous Subsequence Sum Problem 258

7.5.2 Analysis of a Basic Divide-and-Conquer Recurrence 260

7.5.3 A General Upper Bound for Divide-and-Conquer Running

Times 265

7.6 Dynamic Programming 267

7.7 Backtracking 272

Summary 276

Objects of the Game 276

Common Errors 277

On the Internet 278

Exercises 278

References 282

CHAPTER 8 Sorting Algorithms 283

8.1 Why Is Sorting Important? 284

8.2 Preliminaries 285

8.3 Analysis of the Insertion Sort and Other Simple Sorts 285

8.4 Shellsort 289

8.4.1 Performance of Shellsort 290

8.5 Mergesort 293

8.5.1 Linear-Time Merging of Sorted Arrays 293

8.5.2 The Mergesort Algorithm 295

8.6 Quicksort 295

8.6.1 The Quicksort Algorithm 296

8.6.2 Analysis of Quicksort 299

8.6.3 Picking the Pivot 303

8.6.4 A Partitioning Strategy 304

8.6.5 Keys Equal to the Pivot 307

8.6.6 Median-of-Three Partitioning 307

8.6.7 Small Arrays 308

8.6.8 Java Quicksort Routine 309

8.7 Quickselect 311

8.8 A Lower Bound for Sorting 312

Summary 314

Objects of the Game 315

Common Errors 315

On the Internet 316

Exercises 316

References 320

CHAPTER 9 Randomization 323

9.1 Why Do We Need Random Numbers? 323

9.2 Random Number Generators 324

9.3 Nonuniform Random Numbers 330

9.4 Generating a Random Permutation 333

9.5 Randomized Algorithms 334

9.6 Randomized Primality Testing 337

Summary 340

Objects of the Game 340

Common Errors 341

On the Internet 342

Exercises 342

References 344

PART III: APPLICATIONS

CHAPTER 10 Fun and Games 347

10.1 Word Search Puzzles 347

10.1.1 Theory 348

10.1.2 Java Implementation 350

10.2 The Game of Tic-Tac-Toe 350

10.2.1 Alpha-Beta Pruning 353

10.2.2 Transposition Tables 359

10.2.3 Computer Chess 362

Summary 364

Objects of the Game 364

Common Errors 364

On the Internet 365

Exercises 365

References 367

CHAPTER 11 Stacks and Compilers 369

11.1 Balanced-Symbol Checker 369

11.1.1 Basic Algorithm 370

11.1.2 Implementation 371

11.2 A Simple Calculator 380

11.2.1 Postfix Machines 382

11.2.2 Infix to Postfix Conversion 383

11.2.3 Implementation 386

11.2.4 Expression Trees 391

Summary 395

Objects of the Game 396

Common Errors 396

On the Internet 397

Exercises 397

References 398

CHAPTER 12 Utilities 399

12.1 File Compression 399

12.1.1 Prefix Codes 401

12.1.2 Huffman's Algorithm 403

12.1.3 Implementation 405

12.2 A Cross-Reference Generator 420

12.2.1 Basic Ideas 420

12.2.2 Java Implementation 420

Summary 424

Objects of the Game 425

Common Errors 425

On the Internet 425

Exercises 425

References 428

CHAPTER 13 Simulation 429

13.1 The Josephus Problem 429

13.1.1 The Simple Solution 431

13.1.2 A More Efficient Algorithm 431

13.2 Event-Driven Simulation 435

13.2.1 Basic Ideas 435

13.2.2 Example: A Modem Bank Simulation 436

Summary 444

Objects of the Game 444

Common Errors 444

On the Internet 444

Exercises 445

CHATPTER 14 Graphs and Paths 447

14.1 Definitions 448

14.1.1 Represent. ation 449

14.2 Unweighted Shortest-Path Problem 459

14.2.1 Theory 462

14.2.2 Java Implementation 466

14.3 Positive-Weighted, Shortest-Path Problem 467

14.3.1 Theory: Dijkstra's Algorithm 467

14.3.2 Java Implementation 469

14.4 Negative-Weighted, Shortest-Path Problem 471

14.4.1 Theory 473

14.4.2 Java Implementation 474

14.5 Path Problems in Acyclic Graphs 474

14.5.1 Topological Sorting 474

14.5.2 Theory of the Acyclic Shortest-Path Algorithm 476

14.5.3 Java Implementation 478

14.5.4 An Application: Critical-PathAnalysis 480

Summary 483

Objects of the Game 483

Common Errors 485

On the Internet 485

Exercises 485

References 489

PART IV: IMPLEMENTATIONS

CHATPTER 15 Inner Classes and Implementation of ArrayList 493

15.1 Iterators and Nested Classes 493

15.2 Iterators and Inner Classes 495

15.3 The abstractCOllection Class 500

15.4 Implementation of ArrayList with an Iterator 500

Summary 508

~ 13 ~

Objects of the Game 508

Common Error 508

On the Internet 509

Exercises 509

CHATPTER 16 Stacks andOueues 513

16.1 Dynamic Array Implementations 513

16.1.1 Stacks 514

16.1.2 Queues 518

16.2 Linked List Implementations 524

16.2.1 Stacks 524

16.2.2 Queues 525

16.3 Comparison of the Two Methods 530

16.4 The java.uti1 .Stack Class 531

16.5 Double-Ended Queues 533

Summary 534

Objects of the Game 534

Common Errors 534

On the Internet 534

Exercises 535

CHAPTER 17 Linked Lists 537

17.1 Basic Ideas 537

17.1.1 Header Nodes 539

17.1.2 IteratorClasses 541

17.2 Java Implementation 542

17.3 Doubly Linked Lists and Circularly Linked Lists 548

17.4 Sorted Linked Lists 551

17.5 Implementing the Collections API linkedlist Class 551

Summary 563

Objects of the Game 563

Common Errors 563

On the Internet 563

Exercises 564

CHAPTER 18 Trees 569

18.1 General Trees 569

18.1.1 Definitions 570

18.1.2 Implementation 571

18.1.3 An Application: File Systems 572

18.2 Binary Trees 576

18.3 Recursion and Trees 582

18.4 Tree Traversal: Iterator Classes 585

18.4.1 Postorder Traversal 589

18.4.2 InorderTraversal 592

18.4.3 Preorder Traversal 592

18.4.4 Level-OrderTraversals 596

Summary 597

Objects of the Game 598

Common Errors 599

On the Internet 599

Exercises 600

CHATPTER 19 Binary Search Trees 603

19.1 Basic Ideas 603

19.1.1 The Operations 604

19.1.2 Java Implementation 606

19.2 Order Statistics 613

19.2.1 Java Implementation 614

19.3 Analysis of Binary Search Tree Operations 618

19.4 AVL Trees 621

19.4.1 Properties 622

19.4.2 Single Rotation 624

19.4.3 Double Rotation 627

19.4.4 Summary of AVL Insertion 630

19.5 Red-Black Trees 630

19.5.1 Bottom-Up Insertion 631

19.5.2 Top-Down Red-Black Trees 634

19.5.3 Java Implementation 636

19.5.4 Top-DownDeletion 641

19.6 AA-Trees 644

19.6.1 Insertion 646

19.6.2 Deletion 648

19.6.3 Java Implementation 649

19.7 Implementing the Collections API lreeSet and IreeYap

Classes 654

19.8 B-Trees 663

Summary 675

Objects of the Game 676

Common Errors 677

On the Internet 677

Exercises 678

References 680

CHAPTER 20 Hash Tables 683

20.1 Basic Ideas 684

20.2 Hash Function 685

20.3 Linear Probing 687

20.3.1 Naive Analysis of Linear Probing 689

20.3.2 What Really Happens: Primary Clustering 690

20.3.3 Analysis of the find Operation 691

20.4 Quadratic Probing 693

20.4.1 Java Implementation 697

20.4.2 Analysis of Quadratic Probing 703

20.5 Separate Chaining Hashing 706

20.6 Hash Tables Versus Binary Search Trees 707

20.7 Hashing Applications 707

Summary 708

Objects of the Game 708

Common Errors 709

On the Internet 710

Exercises 710

References 712

CHATPTER 21 A Priority Queue: The Binary Heap 715

21.1 Basic Ideas 716

21.1.1 Structure Property 716

21.1.2 Heap-Order Property 718

21.1.3 Allowed Operations 718

21.2 Implementation of the Basic Operations 721

21.2.1 The insert Operation 722

21.2.2 The del eteMin Operation 723

21.3 The build.ap Operation: Linear-Time Heap Construction 726

21.4 Advanced Operations: decreaseKey and merge 731

21.5 Internal Sorting: Heapsort 731

21.6 External Sorting 734

21.6.1 Why We Need New Algorithms 734

21.6.2 Model for External Sorting 735

21.6.3 The Simple Algorithm 735

21.6.4 MultiwayMerge 737

21.6.5 Polyphase Merge 738

21.6.6 Replacement Selection 740

Summary 741

Objects of the Game 741

Common Errors 742

On the Internet 742

Exercises 743

References 747

PART V: ADVANCED DATA STRUCTURES

CHATPTER 22 Splay Trees 751

22.1 Self-Adjustment and Amortized Analysis 752

22.1.1 Amortized Time Bounds 753

22.1.2 A Simple Self-Adjusting Strategy (That Does Not

Work) 753

22.2 The Basic Bottom-Up Splay Tree 755

22.3 Basic Splay Tree Operations 758

22.4 Analysis of Bottom-Up Splaying 759

22.4.1 Proof of the Splaying Bound 762

22.5 Top-Down Splay Trees 765

22.6 Implementation of Top-Down Splay Trees 768

22.7 Comparison of the Splay Tree with Other Search Trees 771

Summary 773

Objects of the Game 773

Common Errors 776

On the Internet 776

Exercises 776

References 777

CHATPTER 23 Merging Priority Queues 779

23.1 The Skew Heap 779

23.1.1 Merging Is Fundamental 780

23.1.2 Simplistic Merging of Heap-Ordered Trees 780

23.1.3 The Skew Heap: A Simple Modification 781

23.1.4 Analysis of the Skew Heap 782

23.2 The Pairing Heap 784

23.2.1 Pairing Heap Operations 785

23.2.2 Implementation of the Pairing Heap 786

23.2.3 Application: Dijkstra's Shortest Weighted Path

Algorithm 791

Summary 796

Objects of the Game 796

Common Errors 796

On the Internet 797

Exercises 797

References 798

CHAPTER 24 The Oisjoint Set Class 801

24.1 Equivalence Relations 802

24.2 Dynamic Equivalence and Applications 802

24.2.1 Application: Generating Mazes 803

24.2.2 Application: Minimum Spanning Trees 806

24.2.3 Application: The Nearest Common Ancestor Problem 809

24.3 The Quick-Find Algorithm 813

24.4 The Quick-Union Algorithm 814

24.4.1 Smart Union Algorithms 815

24.4.2 Path Compression 817

24.5 Java Implementation 818

24.6 Worst Case for Union-by-Rank and Path Compression 821

24.6.1 Analysis of the Union/Find Algorithm 822

Summary 828

Objects of the Game 829

Common Errors 830

On the Internet 830

Exercises 830

References 833

APPENDICES

APPENDIX A Operators 835

APPENDIX B Graphical User Interfaces 837

B.1 The Abstract Window Toolkit and Swing 838

B.2 Basic Objects in Swing 839

B.2.1 Component 839

B.2.2 Container 841

B.2.3 Top-level Containers 841

B.2.4 jPanel 842

B.2.5 Important I/O Components 843

B.3 Basic Principles 848

B.3.1 Layout Managers 848

B.3.2 Graphics 852

B.3.3 Events 853

B.3.4 Event Handling: Adapters and Anonymous Inner

Classes 856

B.3.5 Summary: Putting the Pieces Together 859

B.3.6 Is This Everything I Need To Know About Swing? 860

Summary 860

Objects of the Game 861

Common Errors 863

On the Internet 863

Exercises 863

Reference 865

APPENDIX C BitwiseOperators 867

Index 871