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