內容簡介
本書是一本數據結構的教材,Java語言與數據結構兩條知識主綫貫穿始終,這兩條主綫既相互獨立又相互支撐。本書介紹瞭計算機編程中使用的數據結構和算法,包括29章,每章涉及一個ADT或其不同實現的規格說明和用法;書中貫穿9個Java插麯,涉及Java的高級特性。本書主要講述瞭組織數據、設計類、包、棧、遞歸、排序、隊列、雙端隊列、優先隊列、綫性錶、有序錶、查找、字典、散列、樹、二叉查找樹、堆、平衡查找樹、圖等內容,並對算法的效率進行瞭分析。本書非常適閤作為大學本科生數據結構課程的教材,也可作為計算機研究與開發人員的參考書。
作者簡介
Frank M.Carrano,是美國羅得島大學(University of Rhode Island)計算機科學係榮譽退休教授,於1969年獲得美國锡拉丘茲大學計算機科學專業博士學位。他的興趣包括數據結構、計算機科學教育、社會問題的計算處理和數值計算。Carrano教授對計算機科學高年級本科課程的設計和交付特彆感興趣,曾撰寫瞭多本的計算機科學高年級本科生教科書。
Timothy Henry是美國羅得島大學計算機科係副教授,1986年獲得美國歐道明大學(Old Dominion University)計算機科學專業碩士學位,2001年獲得美國羅得島大學應用數學專業博士學位。從2000年至今一直保有美國PMI的項目管理專傢(Project Management Professional,PMP)認證資格。他教授的課程有:數據結構與抽象、編程語言基礎、操作係統與網絡、計算機係統基礎、計算機科學項目、文件係統取證等。研究的領域有:計算機和數學取證、交互式3D圖形關係、傳感器網絡。
目錄
Data Structures and Abstractions with Java, Fourth Edition
齣版者的話
譯者序
前言
引言 組織數據 1
序言 設計類 3
P.1 封裝 3
P.2 說明方法 5
P.2.1 注釋 5
P.2.2 前置條件和後置條件 5
P.2.3 斷言 6
P.3 Java接口 7
P.3.1 寫一個接口 8
P.3.2 實現一個接口 9
P.3.3 接口作為數據類型 11
P.3.4 派生一個接口 12
P.3.5 接口內命名常量 13
P.4 選擇類 14
P.4.1 標識類 15
P.4.2 CRC卡 15
P.4.3 統一建模語言 16
P.5 重用類 17
第1章 包 22
1.1 什麼是包 22
1.2 說明一個包 23
1.3 使用ADT包 30
1.4 像使用自動販賣機一樣使用ADT 33
1.5 ADT集閤 34
1.6 Java類庫:接口Set 35
Java插麯1 泛型 39
第2章 使用數組實現包 43
2.1 使用固定大小的數組實現ADT包 43
2.1.1 類比 43
2.1.2 一組核心方法 44
2.1.3 實現核心方法 45
2.1.4 讓實現安全 51
2.1.5 測試核心方法 54
2.1.6 實現更多的方法 56
2.1.7 刪除項的方法 58
2.2 使用可變大小的數組實現ADT包 65
2.2.1 可變大小數組 65
2.2.2 包的新實現 68
2.3 使用數組實現ADT包的優缺點 70
Java插麯2 異常 75
第3章 使用鏈式數據實現包 82
3.1 鏈式數據 82
3.2 ADT包的鏈式實現 84
3.2.1 私有類Node 84
3.2.2 類LinkedBag的框架 85
3.2.3 定義一些核心方法 86
3.2.4 測試核心方法 89
3.2.5 方法getFrequencyOf 90
3.2.6 方法contains 91
3.3 從鏈中刪除一項 92
3.4 有設置和獲取方法的類Node 96
3.5 使用鏈實現ADT包的優缺點 98
第4章 算法的效率 102
4.1 動機 102
4.2 測量算法的效率 103
4.2.1 計數基本操作 105
4.2.2 最優、最差和平均情形 106
4.3 大O錶示 107
4.4 描述效率 110
4.5 實現ADT包的效率 113
4.5.1 基於數組的實現 113
4.5.2 鏈式實現 114
4.5.3 兩種實現的比較 115
第5章 棧 121
5.1 ADT棧的規格說明 121
5.2 使用棧來處理代數錶達式 125
5.2.1 問題求解:檢查中綴代數錶達式中平衡的分隔符 125
5.2.2 問題求解:將中綴代數錶達式轉換為後綴錶達式 129
5.2.3 問題求解:計算後綴錶達式的值 133
5.2.4 問題求解:計算中綴錶達式的值 134
5.3 程序棧 136
5.4 Java類庫:類Stack 137
第6章 棧的實現 142
6.1 鏈式實現 142
6.2 基於數組的實現 144
6.3 基於嚮量的實現 148
6.3.1 Java類庫:類Vector 148
6.3.2 使用嚮量實現ADT棧 149
第7章 遞歸 154
7.1 什麼是遞歸 154
7.2 跟蹤遞歸方法 158
7.3 返迴一個值的遞歸方法 160
7.4 遞歸處理數組 162
7.5 遞歸處理鏈 165
7.6 遞歸方法的時間效率 166
7.6.1 countDown的時間效率 166
7.6.2 計算xn的時間效率 167
7.7 睏難問題的簡單求解方案 168
7.8 簡單問題的低劣求解方案 172
7.9 尾遞歸 174
7.10 間接遞歸 176
7.11 使用棧來替代遞歸 177
Java插麯3 再談泛型 185
第8章 排序簡介 194
8.1 對數組進行排序的Java方法的組織 194
8.2 選擇排序 195
8.2.1 迭代選擇排序 196
8.2.2 遞歸選擇排序 198
8.2.3 選擇排序的效率 198
8.3 插入排序 199
8.3.1 迭代插入排序 199
8.3.2 遞歸插入排序 201
8.3.3 插入排序的效率 202
8.3.4 鏈式結點鏈的插入排序 203
8.4 希爾排序 205
8.4.1 算法 206
8.4.2 希爾排序的效率 207
8.5 算法比較 208
第9章 更快的排序方法 213
9.1 歸並排序 213
9.1.1 歸並數組 213
9.1.2 遞歸歸並排序 214
9.1.3 歸並排序的效率 216
9.1.4 迭代歸並排序 217
9.1.5 Java類庫中的歸並排序 218
9.2 快速排序 218
9.2.1 快速排序的效率 219
9.2.2 創建劃分 219
9.2.3 實現快速排序 221
9.2.4 Java類庫中的快速排序 223
9.3 基數排序 223
9.3.1 基數排序的僞代碼 225
9.3.2 基數排序的效率 225
9.4 算法比較 226
Java插麯4 再談異常 231
第10章 隊列、雙端隊列和優先隊列 238
10.1 ADT隊列 238
10.1.1 問題求解:模擬排隊 241
10.1.2 問題求解:計算齣售股票的資本收益 246
10.1.3 Java類庫:接口Queue 248
10.2 ADT雙端隊列 249
10.2.1 問題求解:計算齣售股票的資本收益 251
10.2.2 Java類庫:接口Deque 252
10.2.3 Java類庫:類ArrayDeque 253
10.3 ADT優先隊列 254
10.3.1 問題求解:跟蹤任務分配 255
10.3.2 Java類庫:類PriorityQueue 257
第11章 隊列、雙端隊列和優先隊列的實現 262
11.1 隊列的鏈式實現 262
11.2 基於數組實現隊列 265
11.2.1 循環數組 266
11.2.2 帶一個不用位置的循環數組 267
11.3 隊列的循環鏈式實現 272
11.4 Java類庫:類AbstractQueue 277
11.5 雙端隊列的雙嚮鏈式實現 2
前言/序言
Data Structures and Abstractions with Java, Fourth Edition歡迎使用本書,本書可作為數據結構課程的教材,例如CS-2課程。
作者集30餘年講授本科生計算機科學課程的教學經驗,時刻謹記師生的需求來寫作本書。作者想讓本書適閤讀者閱讀,這樣學生學得更容易,老師教得更有效果。模仿現實世界情形的一些例子作為新素材的背景,幫助學生理解抽象概念。使用很多簡單的圖來解釋及闡述復雜的思想。
這次修訂保留瞭之前版本中的章節題目及次序。讀者會發現,我們特彆強調不同數據結構的需求及實現的設計決策,同時新增加瞭對安全可靠程序設計慣例的介紹。
我們希望你樂於閱讀本書。與之前的眾多讀者一樣,你能學會(或講授)數據結構,有效果且能堅持下去。
歡迎使用本書的師生聯係我們。非常感謝您的意見、建議及校正。聯係我們的方式如下:
E-mail: carrano@acm.org或thenry@neit.eduFacebook: www.facebook.com/makingitrealTwitter: twitter.com/Frank_M_CarranoWebsite: frank-m-carrano.com/makingitreal本版的組織結構本書采用易於講授及易於學習的方式來組織、排列各章內容,使得每次將注意力集中在一個概念上,也能讓閱讀題的次序更靈活,從而能清楚地區分抽象數據類型(ADT)的規格說明(specification)及其實現。為此,我們將內容分為29章。每章涉及ADT或其不同實現的規格說明及用法。你可以隻討論一種ADT的規格說明及其實現,也可以在考慮實現之前討論多種ADT的規格說明及用法。本書的組織方式方便你按喜歡的次序選擇章節學習。
本版的創新之處章節順序及涉及的題目與前麵的版本保持一緻,根據讀者的反饋,我們將有些資料從附錄或在綫形式移到書中的正文部分。基於讀者的建議及我們自己的修訂意願,對本書做瞭修改。本版中的主要修改如下:
在引言之後和第1章之前新增加瞭一個序言,它主要討論如何設計類。這些資料包含在前一版本的附錄D中。
在全書必要的地方,新安排瞭從附錄或章節中抽齣的與Java相關的Java插麯。這樣做,有效地區分瞭概念及Java本身的問題。這些Java插麯的題目如下所示,它們穿插在章間:
Java插麯1 泛型Java插麯2 異常Java插麯3 再談泛型Java插麯4 再談異常Java插麯5 迭代器Java插麯6 可變及不可變對象Java插麯7 繼承和多態Java插麯8 再論泛型Java插麯9 剋隆安全可靠的程序設計是第2章中的一個新話題,將在新增加的“安全說明”部分討論,並體現在實現ADT的Java代碼中。
在以棧的介紹開頭的第5章中,大多數的ADT方法通過拋齣異常來錶示失敗。當它不是集閤(collection)中的數據值時方法僅返迴null。
泛型的擴展部分討論瞭泛型方法及有界類型。
不可變、可變及剋隆對象在Java插麯中介紹,而不像前一版本那樣放在在綫的第30章中。
增加的“設計決策”部分繼續介紹規格說明及實現具體ADT時的抉擇,並提供選擇的理由。
對圖做瞭修改,結點或數組元素中都顯示具體對象而不是僅顯示值。
不再包含基於嚮量實現的ADT綫性錶和隊列的內容,但留作程序設計項目。
程序清單中給齣瞭行號。
Java代碼遵從Java 8標準。
增補瞭一個測試用例庫。
下麵是各章節的較大修改:
第1章除包之外,還介紹瞭ADT集閤(set)。
第2章介紹瞭安全可靠的程序設計方法。本章建議修改的代碼已集成到後續各章的所有ADT的實現中。
第5和6章在ADT棧的規格說明及實現中用到瞭異常。
第8和9章用僞代碼代替一些排序方法的Java代碼。
第10和11章在ADT隊列、雙端隊列及優先隊列的規格說明和實現中用到瞭異常。
第11章不再包含基於嚮量實現ADT隊列的內容,這些內容留作程序設計項目。
第12、13和14章在ADT綫性錶的規格說明及實現中用到瞭異常。
第13章修改瞭ADT綫性錶基於數組的實現,忽略瞭數組元素從下標0開始。不再包含基於嚮量實現ADT綫性錶的內容,但留作程序設計項目。
第15章僅涉及ADT綫性錶的迭代器。Java中迭代器的概念放在前麵的Java插麯5中,而不是放在這一章中。
第20章不再包含基於嚮量實現ADT字典的內容,這些內容留作程序設計項目。
第23章定義瞭平衡二叉樹,前一版放在第25章中。
第24章不再定義二叉鏈錶結點的接口,類BinaryNode也不再實現這個接口。
如何學習本書本書討論的內容涉及數據的不同組織方法,以便所給的應用程序能以高效的方式訪問並處理數據。這些內容是你未來進一步學習計算機科學知識所不可或缺的,因為它們是創建復雜、可靠軟件所必需的基礎知識。不論你是對設計視頻遊戲感興趣,還是對設計機器人控製手術的軟件感興趣,學習數據結構都是走嚮成功的必經之路。即使你現在沒有學完本書的全部內容,在後麵的學習中也還可能會遇到相關話題。我們希望你享受閱讀本書的過程,希望本書能成為你未來課程學習的有用參考資料。
讀過前言後,還應該讀引言,從而可以快速瞭解本書要討論哪些內容,
數據結構與抽象:Java語言描述(原書第4版) 下載 mobi epub pdf txt 電子書 格式