內容簡介
資料結構與演算法:使用JAVA(第六版)
本書特色
1.本書為Goodrich、Tamassia與Goldwasser累積多年經驗,根據JAVA 7.0程式語言之需求,所撰寫關於資料結構與演算法之書籍。
2.書中程式碼與例題均能將JAVA7.0版本之特色呈現出來。
3.透過書中的圖片,清晰的解說資料結構與演算法的觀念。
4.藉由數百個精選的習題,以增強讀者暸解概念。
5.新增符合目前科技發展的專題研究題目。
內容簡介
本書為Goodrich、Tamassia與Goldwasser累積多年經驗,根據JAVA 7.0程式語言之需求,所撰寫關於資料結構與演算法之書籍。內容架構完整,鉅細靡遺。並透過書中的圖片及教學網站的解說使讀者清楚了解資料結構與演算法的觀念。並附有精選習題,課後立即複習,加強實力。
本書特色
1.本書為Goodrich、Tamassia與Goldwasser累積多年經驗,根據JAVA 7.0程式語言之需求,所撰寫關於資料結構與演算法之書籍。
2.書中程式碼與例題均能將JAVA7.0版本之特色呈現出來。
3.透過書中的圖片,清晰的解說資料結構與演算法的觀念。
4.藉由數百個精選的習題,以增強讀者暸解概念。
5.新增符合目前科技發展的專題研究題目。
內容簡介
本書為Goodrich、Tamassia與Goldwasser累積多年經驗,根據JAVA 7.0程式語言之需求,所撰寫關於資料結構與演算法之書籍。內容架構完整,鉅細靡遺。並透過書中的圖片及教學網站的解說使讀者清楚了解資料結構與演算法的觀念。並附有精選習題,課後立即複習,加強實力。
內容目錄
目錄
Chapter 1 Java程式基礎
1.1 初步(Preliminaries)
1.1.1 基本型態(Base Types)
1.2 物件和類別(Objects and Classes)
1.2.1 建立和使用物件(Creating and Using Objects)
1.2.2 定義類別(Defining a Class)
1.3 特殊型態(Special Types)
1.4 Java 運算式(Java Expressions)
1.4.1 字面文字(Literals)
1.4.2 運算子(Operators)
1.4.3 型態轉換(Type Conversions)
1.5 控制流程(Control Flow)
1.5.1 If和Switch敘述(The If and Switch Statements)
1.5.2 迴圈(Loops)
1.5.3 顯式控制流敘述(Explicit Control-Flow Statements)
1.6 輸入和輸出(Input and Output)
1.7 Java 套件(Java Packages)
1.8 編寫Java 程式(Writing a Java Program)
1.8.1 設計(Design)
1.8.2 虛擬程式碼(Pseudocode)
1.8.3 撰寫程式(Coding)
1.8.4 文件和樣式(Documentation and Style)
1.8.5 測試和除錯(Testing and Debugging)
1.9 習題
Chapter 2 物件導向設計
2.1 目標、原則與設計模式(Goals, Principles, and Patterns)
2.1.1 物件導向設計目標(Object-Oriented Design Goals)
2.1.2 物件導向設計原則(Object-Oriented Design Principles)
2.1.3 設計模式(Design Patterns)
2.2 繼承(Inheritance)
2.2.1 Credit Card類別擴展(Extending the CreditCard Class)
2.2.2 多型與動態配置(Polymorphism and Dynamic Dispatch)
2.2.3 繼承階層(Inheritance Hierarchies)
2.3 介面與抽象類別(Interfaces and Abstract Classes)
2.3.1 java中的介面(Interfaces in Java)
2.3.2 介面的多重繼承(Multiple Inheritance for Interfaces)
2.3.3 抽象類別(Abstract Classes)
2.4 異常(Exceptions)
2.4.1 捕捉異常(Catching Exceptions)
2.4.2 拋出異常(Throwing Exceptions)
2.4.3 Java 異常階層(Java’s Exception Hierarchy)
2.5 轉型與泛型(Casting and Generics)
2.5.1 轉型(Casting)
2.5.2 泛型(Generics)
2.6 巢狀類別(Nested Classes)
2.7 習題
Chapter 3 陣列與鏈結串列
3.1 陣列的實際用法(Practical Uses of Arrays)
3.1.1 在陣列存放遊戲記錄(Storing Game Entries in an Array)
3.1.2 陣列排序(Sorting an Array)
3.1.3 用於陣列隨機數值的java.util方法(java.util Methods for Arrays and Random
Numbers)
3.1.4 使用字串和字元陣列的簡單密碼學(Simple Cryptography with Strings and Character
Arrays)
3.1.5 二維陣列和定位遊戲(Two-Dimensional Arrays and Positional Games)
3.2 單向鏈結串列(Singly Linked Lists)
3.2.1 實現單向鏈結串列(Implementing a Singly Linked List Class)
3.3 環狀鏈結串列(Circularly Linked Lists)
3.3.1 循環式排程(Round-Robin Scheduling)
3.3.2 設計與實現環狀鏈結串列(Designing and Implementing a Circularly Linked List)
3.4 雙向鏈結串列(Doubly Linked Lists)
3.4.1 實現雙向鏈結串列(Implementing a Doubly Linked List Class)
3.5 測試相等性(Testing for Equality)
3.5.1 測試陣列的相等性(Equivalence Testing with Arrays)
3.5.2 測試鏈結串列的相等性(Equivalence Testing with Linked Lists)
3.6 複製資料結構(Copying Data Structures)
3.6.1 複製陣列(Cloning Arrays)
3.6.2 複製鏈結串列(Cloning Linked Lists)
3.7 習題
Chapter 4 分析工具
4.1 實證分析(Empirical Analysis)
4.1.1超越實驗分析(Moving Beyond Experimental Analysis)
4.2 常用數學函式(Common Mathematical Functions)
4.2.1比較成長速率(Comparing Growth Rates)
4.3 Big-Oh 表示法(Big-Oh Notation)
4.3.1定義Big-Oh符號(Defining the “Big-Oh” Notation)
4.3.2比較分析(Comparative Analysis)
4.3.3演算法分析範例(Examples of Algorithm Analysis)
4.4 證明方法(Proof Methods)
4.4.1 實例證明(By Example)
4.4.2 反向證明法(The Contra Attack)
4.4.3 歸納法及迴圈不變式(Induction and Loop Invariants)
4.5 習題
Chapter 5 遞迴
5.1 遞迴基礎(Foundations of Recursion)
5.1.1 階乘函數(The Factorial Function)
5.1.2 描繪英制尺(Drawing an English Ruler)
5.1.3 二元搜尋(Binary Search)
5.1.4 檔案系統(File Systems)
5.2 遞迴分析(Recursive Analysis)
5.3 遞迴的應用(Applications of Recursion)
5.3.1 線性遞迴(Linear Recursion)
5.3.2 二元遞迴(Binary Recursion)
5.3.3 多重遞迴 (Multiple Recursion )
5.4 使用遞迴(Using Recursion)
5.5 遞迴的陷阱(Pitfalls of Recursion)
5.5.1 Java中的最大遞迴深度(Maximum Recursive Depth in Java)
5.6 習題
Chapter 6 堆疊與佇列
6.1 堆疊(Stacks)
6.1.1 堆疊抽象資料型態(The Stack Abstract Data Type)
6.1.2 用陣列完成的簡單堆疊實作(A Simple Array-Based Stack Implementation)
6.1.3 用鏈結串列完成堆疊實作(Implementing a Stack with a Singly Linked List)
6.1.4 括號及HTML 標籤配對(Matching Parentheses and HTML Tags)
6.2 佇列(Queues)
6.2.1 佇列抽象資料型態(The Queue Abstract Data Type)
6.2.2 利用陣列完成佇列實作(Array-Based Queue Implementation)
6.2.3 使用單向鏈結串列實作佇列(Implementing a Queue with a Singly Linked List)
6.2.4 迴圈佇列(A Circular Queue)
6.3 雙向佇列(Double-Ended Queues)
6.3.1 雙向佇列抽象資料型態(The Deque Abstract Data Type)
6.3.2 雙向佇列實作(Implementing a Deque)
6.3.3 Java集合架構中的雙向佇列(Deques in the Java Collections Framework)
6-4 習題
Chapter 7 串列抽象
7.1 串列ADT(The List ADT)
7.2 基於陣列的串列(Array-based Lists)
7.2.1 動態陣列(Dynamic Arrays)
7.2.2 實現動態陣列(Implementing a Dynamic Array)
7.2.3 動態陣列的攤銷分析(Amortized Analysis of Dynamic Arrays)
7.2.4 Java的StringBuilder類別
7.3 基於位置的串列(Position-Based Lists)
7.3.1 位置(Positions)
7.3.2 位置串列抽象資料型態(The Positional List Abstract Data Type)
7.3.3 雙向鏈結串列實現(Doubly Linked List Implementation)
7.4 迭代器(Iterators)
7.4.1 可迭代介面和Java的For-Each迴圈(The Iterable Interface and Java’s For-Each Loop)
7.4.2 實現迭代器(Implementing Iterators)
7.5 群集架構(The Collections Framework)
7.5.1 列出Java中的迭代器(List Iterators in Java)
7.5.2 與Positional List ADT做比較(Comparison to Our Positional List ADT)
7.5.3 Java群集架構中基於串列的演算法(List-Based Algorithms in the Java Collections
Framework)
7.6 習題
Chapter 8 樹結構
8.1 樹的定義和性質(Trees Definitions and Properties)
8.1.1 樹抽象資料型態(The Tree Abstract Data Type)
8.1.2 計算深度和高度(Computing Depth and Height)
8.2 二元樹(Binary Trees)
8.2.1 二元樹抽象資料型態(The Binary Tree Abstract Data Type)
8.2.2 二元樹的性質(Properties of Binary Trees)
8.3 樹的表示方式(Tree Representations)
8.3.1 二元樹的鏈結結構(Linked Structure for Binary Trees)
8.3.2 基於陣列的二元樹表示方式(Array-Based Representation of a Binary Tree)
8.3.3 一般樹的鏈結結構(Linked Structure for General Trees)
8.4 樹遍訪演算法(Tree Traversal Algorithms)
8.4.1 一般樹的前序和後序遍訪(Preorder and Postorder Traversals of General Trees)
Chapter 1 Java程式基礎
1.1 初步(Preliminaries)
1.1.1 基本型態(Base Types)
1.2 物件和類別(Objects and Classes)
1.2.1 建立和使用物件(Creating and Using Objects)
1.2.2 定義類別(Defining a Class)
1.3 特殊型態(Special Types)
1.4 Java 運算式(Java Expressions)
1.4.1 字面文字(Literals)
1.4.2 運算子(Operators)
1.4.3 型態轉換(Type Conversions)
1.5 控制流程(Control Flow)
1.5.1 If和Switch敘述(The If and Switch Statements)
1.5.2 迴圈(Loops)
1.5.3 顯式控制流敘述(Explicit Control-Flow Statements)
1.6 輸入和輸出(Input and Output)
1.7 Java 套件(Java Packages)
1.8 編寫Java 程式(Writing a Java Program)
1.8.1 設計(Design)
1.8.2 虛擬程式碼(Pseudocode)
1.8.3 撰寫程式(Coding)
1.8.4 文件和樣式(Documentation and Style)
1.8.5 測試和除錯(Testing and Debugging)
1.9 習題
Chapter 2 物件導向設計
2.1 目標、原則與設計模式(Goals, Principles, and Patterns)
2.1.1 物件導向設計目標(Object-Oriented Design Goals)
2.1.2 物件導向設計原則(Object-Oriented Design Principles)
2.1.3 設計模式(Design Patterns)
2.2 繼承(Inheritance)
2.2.1 Credit Card類別擴展(Extending the CreditCard Class)
2.2.2 多型與動態配置(Polymorphism and Dynamic Dispatch)
2.2.3 繼承階層(Inheritance Hierarchies)
2.3 介面與抽象類別(Interfaces and Abstract Classes)
2.3.1 java中的介面(Interfaces in Java)
2.3.2 介面的多重繼承(Multiple Inheritance for Interfaces)
2.3.3 抽象類別(Abstract Classes)
2.4 異常(Exceptions)
2.4.1 捕捉異常(Catching Exceptions)
2.4.2 拋出異常(Throwing Exceptions)
2.4.3 Java 異常階層(Java’s Exception Hierarchy)
2.5 轉型與泛型(Casting and Generics)
2.5.1 轉型(Casting)
2.5.2 泛型(Generics)
2.6 巢狀類別(Nested Classes)
2.7 習題
Chapter 3 陣列與鏈結串列
3.1 陣列的實際用法(Practical Uses of Arrays)
3.1.1 在陣列存放遊戲記錄(Storing Game Entries in an Array)
3.1.2 陣列排序(Sorting an Array)
3.1.3 用於陣列隨機數值的java.util方法(java.util Methods for Arrays and Random
Numbers)
3.1.4 使用字串和字元陣列的簡單密碼學(Simple Cryptography with Strings and Character
Arrays)
3.1.5 二維陣列和定位遊戲(Two-Dimensional Arrays and Positional Games)
3.2 單向鏈結串列(Singly Linked Lists)
3.2.1 實現單向鏈結串列(Implementing a Singly Linked List Class)
3.3 環狀鏈結串列(Circularly Linked Lists)
3.3.1 循環式排程(Round-Robin Scheduling)
3.3.2 設計與實現環狀鏈結串列(Designing and Implementing a Circularly Linked List)
3.4 雙向鏈結串列(Doubly Linked Lists)
3.4.1 實現雙向鏈結串列(Implementing a Doubly Linked List Class)
3.5 測試相等性(Testing for Equality)
3.5.1 測試陣列的相等性(Equivalence Testing with Arrays)
3.5.2 測試鏈結串列的相等性(Equivalence Testing with Linked Lists)
3.6 複製資料結構(Copying Data Structures)
3.6.1 複製陣列(Cloning Arrays)
3.6.2 複製鏈結串列(Cloning Linked Lists)
3.7 習題
Chapter 4 分析工具
4.1 實證分析(Empirical Analysis)
4.1.1超越實驗分析(Moving Beyond Experimental Analysis)
4.2 常用數學函式(Common Mathematical Functions)
4.2.1比較成長速率(Comparing Growth Rates)
4.3 Big-Oh 表示法(Big-Oh Notation)
4.3.1定義Big-Oh符號(Defining the “Big-Oh” Notation)
4.3.2比較分析(Comparative Analysis)
4.3.3演算法分析範例(Examples of Algorithm Analysis)
4.4 證明方法(Proof Methods)
4.4.1 實例證明(By Example)
4.4.2 反向證明法(The Contra Attack)
4.4.3 歸納法及迴圈不變式(Induction and Loop Invariants)
4.5 習題
Chapter 5 遞迴
5.1 遞迴基礎(Foundations of Recursion)
5.1.1 階乘函數(The Factorial Function)
5.1.2 描繪英制尺(Drawing an English Ruler)
5.1.3 二元搜尋(Binary Search)
5.1.4 檔案系統(File Systems)
5.2 遞迴分析(Recursive Analysis)
5.3 遞迴的應用(Applications of Recursion)
5.3.1 線性遞迴(Linear Recursion)
5.3.2 二元遞迴(Binary Recursion)
5.3.3 多重遞迴 (Multiple Recursion )
5.4 使用遞迴(Using Recursion)
5.5 遞迴的陷阱(Pitfalls of Recursion)
5.5.1 Java中的最大遞迴深度(Maximum Recursive Depth in Java)
5.6 習題
Chapter 6 堆疊與佇列
6.1 堆疊(Stacks)
6.1.1 堆疊抽象資料型態(The Stack Abstract Data Type)
6.1.2 用陣列完成的簡單堆疊實作(A Simple Array-Based Stack Implementation)
6.1.3 用鏈結串列完成堆疊實作(Implementing a Stack with a Singly Linked List)
6.1.4 括號及HTML 標籤配對(Matching Parentheses and HTML Tags)
6.2 佇列(Queues)
6.2.1 佇列抽象資料型態(The Queue Abstract Data Type)
6.2.2 利用陣列完成佇列實作(Array-Based Queue Implementation)
6.2.3 使用單向鏈結串列實作佇列(Implementing a Queue with a Singly Linked List)
6.2.4 迴圈佇列(A Circular Queue)
6.3 雙向佇列(Double-Ended Queues)
6.3.1 雙向佇列抽象資料型態(The Deque Abstract Data Type)
6.3.2 雙向佇列實作(Implementing a Deque)
6.3.3 Java集合架構中的雙向佇列(Deques in the Java Collections Framework)
6-4 習題
Chapter 7 串列抽象
7.1 串列ADT(The List ADT)
7.2 基於陣列的串列(Array-based Lists)
7.2.1 動態陣列(Dynamic Arrays)
7.2.2 實現動態陣列(Implementing a Dynamic Array)
7.2.3 動態陣列的攤銷分析(Amortized Analysis of Dynamic Arrays)
7.2.4 Java的StringBuilder類別
7.3 基於位置的串列(Position-Based Lists)
7.3.1 位置(Positions)
7.3.2 位置串列抽象資料型態(The Positional List Abstract Data Type)
7.3.3 雙向鏈結串列實現(Doubly Linked List Implementation)
7.4 迭代器(Iterators)
7.4.1 可迭代介面和Java的For-Each迴圈(The Iterable Interface and Java’s For-Each Loop)
7.4.2 實現迭代器(Implementing Iterators)
7.5 群集架構(The Collections Framework)
7.5.1 列出Java中的迭代器(List Iterators in Java)
7.5.2 與Positional List ADT做比較(Comparison to Our Positional List ADT)
7.5.3 Java群集架構中基於串列的演算法(List-Based Algorithms in the Java Collections
Framework)
7.6 習題
Chapter 8 樹結構
8.1 樹的定義和性質(Trees Definitions and Properties)
8.1.1 樹抽象資料型態(The Tree Abstract Data Type)
8.1.2 計算深度和高度(Computing Depth and Height)
8.2 二元樹(Binary Trees)
8.2.1 二元樹抽象資料型態(The Binary Tree Abstract Data Type)
8.2.2 二元樹的性質(Properties of Binary Trees)
8.3 樹的表示方式(Tree Representations)
8.3.1 二元樹的鏈結結構(Linked Structure for Binary Trees)
8.3.2 基於陣列的二元樹表示方式(Array-Based Representation of a Binary Tree)
8.3.3 一般樹的鏈結結構(Linked Structure for General Trees)
8.4 樹遍訪演算法(Tree Traversal Algorithms)
8.4.1 一般樹的前序和後序遍訪(Preorder and Postorder Traversals of General Trees)