JAVA面向?qū)ο髷?shù)據(jù)結(jié)構(gòu)完全學(xué)習(xí)教程
定 價:139 元
當(dāng)前圖書已被 6 所學(xué)校薦購過!
查看明細(xì)
- 作者:(美)內(nèi)爾·黛爾(Nell Dale),(美)丹尼爾·T·喬伊斯(Daniel T. Joyce),(美)奇普·威姆斯(Chip Weems)著
- 出版時間:2019/7/1
- ISBN:9787515355252
- 出 版 社:中國青年出版社
- 中圖法分類:TP312.8JA
- 頁碼:704頁
- 紙張:膠版紙
- 版次:1
- 開本:16K
本書主要介紹傳統(tǒng)的和現(xiàn)代的數(shù)據(jù)結(jié)構(gòu)方面的知識,重點(diǎn)介紹問題的解決和軟件的設(shè)計。從基礎(chǔ)知識開始并貫穿全書,介紹并擴(kuò)展了許多Java功能的應(yīng)用,如類、對象、泛型、多態(tài)、包、接口、庫中的類、繼承、異常和線程等。還在整個講解過程中使用統(tǒng)一建模語言(UML)類圖來幫助建模并可視化對象、類、接口、應(yīng)用程序及其相互關(guān)系。
JAVA面向?qū)ο髷?shù)據(jù)結(jié)構(gòu)編程經(jīng)典教程,受到萬千讀者口碑檢驗!專業(yè)的人寫專業(yè)的書給專業(yè)的讀者!重印多次全新再造,去蕪存菁,重寫了大部分資料,另外新增大量數(shù)據(jù)結(jié)構(gòu)相關(guān)鍵資料,幫助你深度掌握J(rèn)AVA面向?qū)ο髷?shù)據(jù)結(jié)構(gòu)!
[ 美]內(nèi)爾·黛爾 Nell Dale
得克薩斯大學(xué)奧斯汀分校計算機(jī)科學(xué)博士。她自 1975 年以來,一直在得克薩斯大學(xué)奧斯汀分校任教,同時專注于計算機(jī)科學(xué)教育、寫作。出版或參與出版過的專著有《Computer Science
Illuminated》《Programming and Problem Solving withC : Brief Edition》《C Plus Data Structures》等。
[ 美]奇普·威姆斯 Chip Weems
美國馬薩諸塞大學(xué)阿默斯特分校計算機(jī)科學(xué)專業(yè)副教授。在過去的 20 多年中,他教授了入門編程、軟件工程、計算機(jī)體系結(jié)構(gòu)和并行處理等課程。自 1986 年以來,他與其他人合作編寫了 13 本教科書,幫助 100 多萬學(xué)生學(xué)習(xí)計算機(jī)編程。他的書已被譯成法語、西班牙語和俄語�,F(xiàn)在,他從事計算機(jī)體系結(jié)構(gòu)、編譯器、并行處理和編譯器體系結(jié)構(gòu)協(xié)同優(yōu)化方面的研
究。出版或參與出版的專著有《Turbo Pascal》《Programmingand Problem Solving with C 》《Programming inC 》《C Plus Data Structures》等。
Chapter 1 知識整理
1.1 類、對象和應(yīng)用程序
類
統(tǒng)一方法
對象
應(yīng)用程序
1.2 組織類
繼承
包
1.3 異常
處理異常狀況
異常與類:實(shí)例
1.4 數(shù)據(jù)結(jié)構(gòu)
非獨(dú)立實(shí)現(xiàn)的結(jié)構(gòu)
獨(dú)立實(shí)現(xiàn)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)的含義?
1.5 基本結(jié)構(gòu)化機(jī)制
內(nèi)存
引用
數(shù)組
1.6 算法比較:增長階分析
測算法的時間效率
情況復(fù)雜度
輸入值的大小
算法比較 66
增長順序 68
選擇排序算法 69
常見的增長階 72
小結(jié) 73
習(xí)題 74
Chapter 2 抽象數(shù)據(jù)類型—棧
2.1 抽象
信息隱藏
數(shù)據(jù)抽象
數(shù)據(jù)層次
前置條件和后置條件
Java接口
基于接口的多態(tài)性
2.2 棧
棧的操作
棧的用法
2.3 集合元素
常用集合
2.4 棧接口
異常情況
接口
應(yīng)用實(shí)例
2.5 基于數(shù)組的棧實(shí)現(xiàn)
ArrayBoundedstack類
棧操作的定義
ArrayListStack類
2.6 應(yīng)用程序:平衡表達(dá)式
平衡類
應(yīng)用程序
軟件架構(gòu)
2.7 鏈表
數(shù)組與鏈表
LLNode類
鏈表操作
2.8 基于鏈接的棧
LinkedStack類
壓棧操作
彈棧操作
其他棧操作
比較棧的實(shí)現(xiàn)方式
2.9 應(yīng)用程序:后綴表達(dá)式評估器
討論
后綴表達(dá)式求值
后綴表達(dá)式求值算法
錯誤處理
PostFixEvaluator類
PFixCLI類
2.10 棧變體
重新審視棧抽象數(shù)據(jù)類型
Java棧類和集合框架
小結(jié)
習(xí)題
Chapter 3 遞歸
3.1 遞歸定義、算法和程序
遞歸定義
遞歸計算
遞歸程序
階乘的迭代解決方案
3.2 三個問題
驗證遞歸算法
確定輸入限制
編寫遞歸方法
調(diào)試遞歸方法
3.3 數(shù)組的遞歸處理
二分查找
3.4 鏈表的遞歸處理
鏈表的遞歸性質(zhì)
鏈表遍歷
鏈表轉(zhuǎn)換
……
11.5 查找
順序查找
高概率排序
有序集合
哈希法
小結(jié)
習(xí)題
附錄A
附錄B
附錄C
附錄D
術(shù)語表
索引
抽象數(shù)據(jù)類型—隊列
知識目標(biāo)
你可以
在抽象層次描述隊列和其實(shí)現(xiàn)
定義隊列接口
描述用數(shù)組實(shí)現(xiàn)隊列操作的算法
比較基于數(shù)組實(shí)現(xiàn)隊列的固定隊頭和浮動隊頭方法
說明如何用數(shù)組實(shí)現(xiàn)無界隊列
描述用鏈表實(shí)現(xiàn)隊列操作的算法
用增長階分析描述及比較隊列算法的效率
定義隊列中元素的間隔時間、服務(wù)時間、周轉(zhuǎn)時間和等待時間
說明并發(fā)線程如何互相干擾、引發(fā)出錯,以及如何預(yù)防該干擾
技能目標(biāo)
你可以
用數(shù)組實(shí)現(xiàn)有界隊列抽象數(shù)據(jù)類型(ADT)
用數(shù)組實(shí)現(xiàn)無界隊列ADT
用鏈表實(shí)現(xiàn)無界隊列ADT
繪制圖表表示特定隊列實(shí)現(xiàn)的隊列操作效果
使用隊列ADT作為應(yīng)用程序的一部分
給定到達(dá)時間和服務(wù)要求,計算隊列元素的周轉(zhuǎn)時間和等待時間
用隊列模擬系統(tǒng)調(diào)研真實(shí)世界中的隊列屬性
實(shí)現(xiàn)一個程序,它能正確使用線程以利用問題解決方案內(nèi)置的平行性
本章我們將討論隊列。在邏輯上隊列與棧相對應(yīng),棧屬于“后進(jìn)先出”結(jié)構(gòu),而
隊列屬于“先進(jìn)先出”結(jié)構(gòu)。在隊列中時間最長的元素就是最先移除的元素。與棧
一樣,隊列有多種與系統(tǒng)編程有關(guān)的重要用法,而且該結(jié)構(gòu)也適用于其他多種應(yīng)用
程序。
我們把隊列當(dāng)成一種抽象數(shù)據(jù)類型,從抽象層次、應(yīng)用層次和實(shí)現(xiàn)層次來對待。
在抽象層次,隊列用Java接口定義。我們將討論數(shù)種隊列應(yīng)用程序,特別是探討如何
用隊列確定某個字符串是否屬于回文,并調(diào)研真實(shí)世界中的隊列屬性。我們將用兩種
基本方法實(shí)現(xiàn)隊列:數(shù)組和鏈表。除了用數(shù)組實(shí)現(xiàn)有界隊列之外,我們也會學(xué)習(xí)如何
用數(shù)組實(shí)現(xiàn)無界隊列。與我們處理視圖的正常順序有所不同,本章的最后一節(jié)討論了
如何使用隊列來保存旨在執(zhí)行并行的任務(wù),而如果這種并行性能夠用于提高性能,我
們該如何使用Java來妥善利用并列。
4.1 隊列
在Chapter 2中學(xué)習(xí)的棧結(jié)構(gòu),通常是在同一端進(jìn)行元素添加和移除。但如果我們
需要介紹一種有不同操作方式的集合,又該怎么辦呢?假設(shè)我們模擬洗車場洗車,車
輛從車場的一頭進(jìn)去,從另一頭出來。元素從一端進(jìn)入,再從相反的另一端出來的數(shù)
據(jù)結(jié)構(gòu)稱為隊列。隊列數(shù)據(jù)結(jié)構(gòu),就跟洗車場一樣,其特點(diǎn)就是最先進(jìn)去的元素(車
輛)是最先出來的元素(車輛)。
這種隊列的基本形式存在數(shù)種變體,為了進(jìn)行區(qū)別,我們一般引用先進(jìn)先出的隊
列。其他隊列版本將在第4.7節(jié)“隊列變體”和Chapter 9“抽象數(shù)據(jù)類型-優(yōu)先級隊
列”中進(jìn)行介紹。現(xiàn)在我們把注意力集中在隊列的常見版本,即一般所說的“隊列”
是指先進(jìn)先出的隊列。與棧的情況一樣,我們從三個層次把隊列視為一種抽象數(shù)據(jù)類
型:抽象、實(shí)現(xiàn)和應(yīng)用層次。
隊列操作
書店的例子暗示了可以應(yīng)用于隊列的兩種操作。首先,我們可以在隊尾添加新元
素,這個操作叫入隊(enqueue);其次,我們可以從隊頭移除元素,這個操作叫出隊
(dequeue)。圖4.2用方塊模擬隊列元素,向我們展示了上述操作對隊列產(chǎn)生的影響。
與棧操作的壓棧和退棧不一樣,隊列的添加和移除操作沒有標(biāo)準(zhǔn)的名稱。 enqueue
操作有時也會叫enq、 enque、 add(添加)或者insert(插入), dequeue的別稱也有
deq、 deque、 remove(移除)、或serve。
使用隊列
Chapter 2中討論了操作系統(tǒng)和編譯程序如何使用棧。同樣地,隊列也經(jīng)常用于系
統(tǒng)編程。例如,某個操作系統(tǒng)通常備有隨時可執(zhí)行的處理隊列,或者等待特定事件發(fā)
生便可執(zhí)行的處理隊列。
另一個例子是,計算機(jī)系統(tǒng)通常必須提供“存儲區(qū)”,以存放在兩個處理進(jìn)程、兩
個程序甚至兩個系統(tǒng)之間傳送的信息。這個存儲區(qū)通常稱為“緩存”,通常作為隊列實(shí)
現(xiàn)。例如,如果一個郵件伺服器在同一時間收到大量郵件信息,這些信息會先存放在
緩存區(qū),直到該郵件伺服器做好準(zhǔn)備處理這些信息。如果伺服器是按照信息到達(dá)的先
后順序—先進(jìn)先出的順序進(jìn)行處理的話,那么該緩存就屬于隊列。
很多其他應(yīng)用程序在處理之前都要先存儲請求。試想一下為顧客提供服務(wù)的應(yīng)用
程序,比如出售飛機(jī)票或者電影票。這些應(yīng)用程序通常會用隊列來處理請求。
如書店的例子所示,軟件所用的隊列在現(xiàn)實(shí)世界中有相對應(yīng)的例子。類似的還有
我們要排隊買比薩、排隊進(jìn)影院、排隊過收費(fèi)站、排隊坐過山車等。隊列數(shù)據(jù)結(jié)構(gòu)的
另一種重要應(yīng)用是幫助我們模擬和分析現(xiàn)實(shí)世界的這些隊列,有關(guān)這點(diǎn)我們將在第4.8
節(jié)“應(yīng)用程序:平均等待時間”中的范例應(yīng)用中介紹。
4.2 隊列接口
本節(jié)將正式指定隊列ADT。除了enqueue和dequeue操作與push、 pop和top不同之
外,隊列所使用的基本方法與棧ADT一樣:
隊列都是泛型的—特定隊列持有的對象類型在該隊列實(shí)例化時由客戶端指示。
定義支持隊列的類在ch04.queues package中成組呈現(xiàn)。
提供觀察函數(shù)操作size(大小),以便應(yīng)用程序確定隊列的大小。隊列的大小對于
應(yīng)用程序而言很重要,因為它意味著元素可以待在隊列多久。
提供觀察函數(shù)操作isEmpty(為空)和isFull(為滿),以便客戶端在合適的情況下
能夠預(yù)防自己嘗試從空隊列中移除元素,或者在滿隊列中添加元素。
創(chuàng)建QueueUnderflowException(隊列下溢異常)和QueueOverflowException(隊列
溢出異常)兩個類。
創(chuàng)建一個QueueInterface(隊列接口),定義隊列方法的特征。實(shí)現(xiàn)隊列應(yīng)該要實(shí)
現(xiàn)這個接口。
兩個異常類的代碼基本上與Chapter 2中棧所用的兩個異常類的代碼一樣,所以這
里不予展示。與棧的情況一樣,應(yīng)用程序員能夠在訪問隊列之前,決定使用isFull和
isEmpty兩個觀察函數(shù)來預(yù)防出現(xiàn)問題,或者應(yīng)用程序能夠嘗試訪問操作,“捕獲并處
理”引發(fā)的異常。
以下為QueueInterface。該接口定義隊列五個方法的特征—enqueue、 dequeue、
isEmpty、 isFull和size。