數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ)(Java語言實現(xiàn))
定 價:119 元
- 作者:柳偉衛(wèi)
- 出版時間:2021/11/1
- ISBN:9787301325872
- 出 版 社:北京大學出版社
- 中圖法分類:TP311.12;TP312.8
- 頁碼:600
- 紙張:
- 版次:1
- 開本:16開
隨著云計算、大數(shù)據(jù)、人工智能、虛擬現(xiàn)實等應用的興起,企業(yè)對于開發(fā)人員的算法要求也越來越高。本書全面講解了在編程中涉及到的常用的數(shù)據(jù)結(jié)構(gòu)及算法,同時,輔以大量的實戰(zhàn)案例,圖文并茂,令讀者易于理解掌握。同時,案例的選型偏終于解決實際問題,具有很強的應用性、趣味性。全書示例采用Java語言編寫,書中示例也可以作為面試使用。
本書書分為以下幾部分:第一部分 預備知識(第1-2章):介紹數(shù)據(jù)結(jié)構(gòu)和算法的基本概念,并演示如何搭建開發(fā)環(huán)境、編寫測試用例。第二部分 數(shù)據(jù)結(jié)構(gòu)(第3-14章):介紹常見的數(shù)據(jù)結(jié)構(gòu),包括數(shù)組、鏈表、矩陣、棧、隊列、跳表、散列、樹、圖等。第三部分 常用算法(第15-20章):介紹常用的算法,包括分而治之、動態(tài)規(guī)劃、貪婪算法、回溯、分支界定、遺傳算法等。第四部分 商業(yè)實戰(zhàn)(第21-22章):介紹漢諾塔及五子棋兩款游戲的實現(xiàn)。本書適合對Java數(shù)據(jù)結(jié)構(gòu)及算法感興趣的學生、開發(fā)人員和架構(gòu)師閱讀。
柳偉衛(wèi),網(wǎng)名老衛(wèi)、waylau,在 IT 公司擔任項目經(jīng)理、架構(gòu)師、高級技術(shù)顧問等職位,是 CSDN、 開源中國、云棲社區(qū)等技術(shù)社區(qū)專家,慕課網(wǎng)特邀講師。具有多年軟件開發(fā)管理及系統(tǒng)架構(gòu)經(jīng)驗。負責過多個省、國家級大型分布式系統(tǒng)的設計與研發(fā),參與了多個大型項目的微服務架構(gòu)的技術(shù)改造,在實際工作中,積累了大量系統(tǒng)架構(gòu)、大數(shù)據(jù)處理以及性能調(diào)優(yōu)經(jīng)驗。已經(jīng)出版了《分布式系統(tǒng)常用技術(shù)及案例分析》《Spring Boot 企業(yè)級應用開發(fā)實戰(zhàn)》《Spring Cloud 微服務架構(gòu)開發(fā)實戰(zhàn)》《Spring 5 開發(fā)大全》《Cloud Native 分布式架構(gòu)原理與實踐》《大型互聯(lián)網(wǎng)應用輕量級架構(gòu)實戰(zhàn)》等專著。
第1章 緒論 1
1.1 引言 2
1.1.1 數(shù)據(jù)結(jié)構(gòu)概述 2
1.1.2 什么是算法 5
1.1.3 算法的描述 5
1.2 程序的性能 9
1.2.1 程序的性能 9
1.2.2 程序的性能 10
1.3 漸近記法 12
1.3.1 大O標記法 12
1.3.2 大Ω標記法 12
1.3.3 大Θ標記法 13
1.3.4 漸近記法總結(jié) 13
1.4 算法復雜度等級及其分析 13
1.4.1 常數(shù)的時間復雜度O(1) 14
1.4.2 對數(shù)的時間復雜度O(logn) 14
1.4.3 線性的時間復雜度O(n) 15
1.4.4 平方的時間復雜度O(n2) 16
1.4.5 指數(shù)的時間復雜度O(2n) 16
1.4.6 算法復雜度總結(jié) 17
1.5 總結(jié) 17
1.6 習題 18
第2章 開發(fā)環(huán)境搭建及測試 19
2.1 安裝JDK 20
2.1.1 解壓.zip文件到指定位置 20
2.1.2 設置環(huán)境變量 20
2.1.3 驗證安裝 21
2.2 安裝Maven 22
2.2.1 安裝 22
2.2.2 設置本地倉庫 22
2.2.3 設置鏡像 23
2.3 安裝IDE 23
2.3.1 解壓.zip文件到指定位置 23
2.3.2 配置工作區(qū)間 24
2.3.3 配置JDK 24
2.3.4 配置Maven 24
2.3.5 設置字符編碼 26
2.4 實戰(zhàn):編寫單元測試用例 26
2.4.1 創(chuàng)建HelloWorld類 26
2.4.2 使用JUnit5 27
2.4.3 編寫JUnit5測試用例 27
2.5 總結(jié) 29
2.6 習題 29
第3章 順序表 30
3.1 Java數(shù)組初探 31
3.2 線性表數(shù)據(jù)結(jié)構(gòu) 32
3.3 實戰(zhàn):使用數(shù)組實現(xiàn)順序表
SequentialList 37
3.4 順序表的動態(tài)擴容 47
3.4.1 順序表的動態(tài)擴容原理 47
3.4.2 動態(tài)擴容機制的選擇 48
3.4.3 ArrayList動態(tài)擴容分析 49
3.4.4 Vector動態(tài)擴容分析 50
3.4.5 選擇ArrayList還是Vector 52
3.5 總結(jié) 52
3.6 習題 52
第4章 鏈表 53
第5章 數(shù)組和矩陣 93
第6章 棧 114
6.1 基本概念及應用場景 115
6.1.1 棧的基本概念 115
6.1.2 棧的應用場景 115
6.2 抽象數(shù)據(jù)類型 117
6.3 數(shù)組描述 117
6.4 實戰(zhàn):使用數(shù)組實現(xiàn)棧
SequentialListStack 117
6.4.1 成員變量及構(gòu)造函數(shù) 117
6.4.2 統(tǒng)計棧的規(guī)模 118
6.4.3 判斷棧中的數(shù)據(jù)元素是否為空 118
6.4.4 入棧 118
6.4.5 出棧 119
6.4.6 引用棧頂對象 119
6.4.7 時間復雜度分析總結(jié) 119
6.4.8 單元測試 119
6.5 鏈表描述 121
6.6 實戰(zhàn):使用鏈表實現(xiàn)棧
SinglyLinkedListStack 122
6.6.1 成員變量及構(gòu)造函數(shù) 122
6.6.2 統(tǒng)計棧的規(guī)模 122
6.6.3 判斷棧中的數(shù)據(jù)元素是否為空 122
6.6.4 入棧 123
6.6.5 出棧 123
6.6.6 引用棧頂對象 123
6.6.7 時間復雜度分析總結(jié) 123
6.6.8 單元測試 123
6.7 總結(jié) 125
6.8 習題 125
第7章 隊列 126
第8章 跳表和散列 183
8.1 字典 184
8.1.1 跳表 184
8.1.2 散列 185
8.2 抽象數(shù)據(jù)類型 186
8.2.1 Dictionary抽象類 186
8.2.2 Map接口 187
8.2.3 Dictionary抽象類和Map接口
的抉擇 194
8.3 散列HashMap 194
8.3.1 HashMap的聲明 195
8.3.2 HashMap的成員變量和構(gòu)造
函數(shù) 201
8.3.3 HashMap的核心方法 203
8.3.4 實戰(zhàn):HashMap的單元測試 210
8.3.5 實戰(zhàn):HashMap的應用案例
——詞頻統(tǒng)計 214
8.4 基于跳表實現(xiàn)的
ConcurrentSkipListMap 216
8.4.1 ConcurrentSkipListMap的聲明 216
8.4.2 ConcurrentSkipListMap的成員
變量和構(gòu)造函數(shù) 217
8.4.3 ConcurrentSkipListMap的核心
方法 219
8.4.4 實戰(zhàn):ConcurrentSkipListMap
的單元測試 232
8.4.5 實戰(zhàn):ConcurrentSkipListMap
的應用案例——詞頻統(tǒng)計 235
8.5 實戰(zhàn):文本壓縮 237
8.5.1 文本的壓縮和解壓 238
8.5.2 文本的壓縮和解壓的實現(xiàn) 238
8.5.3 測試文本的壓縮和解壓 240
8.6 總結(jié) 242
8.7 習題 243
第9章 樹及二叉樹 244
9.10 習題 272
第10章 優(yōu)先級隊列及堆 273
10.1 基本概念及應用場景 274
10.2 抽象數(shù)據(jù)類型 274
10.3 數(shù)組描述 274
10.4 實戰(zhàn):使用數(shù)組實現(xiàn)優(yōu)先級隊列 275
10.4.1 定義實現(xiàn)類 275
10.4.2 實現(xiàn)插入 276
10.4.3 實現(xiàn)刪除 278
10.4.4 單元測試 279
10.5 堆描述 282
10.5.1 堆的定義 283
10.5.2 堆和普通樹的區(qū)別 283
10.5.3 堆的存儲 284
10.5.4 堆的常用操作 284
10.6 實戰(zhàn):使用堆實現(xiàn)優(yōu)先級隊列 285
10.6.1 定義實現(xiàn)類 286
10.6.2 實現(xiàn)插入 287
10.6.3 實現(xiàn)刪除 289
10.6.4 單元測試 291
10.7 總結(jié) 293
10.8 習題 294
第11章 二叉查找樹 295
第12章 平衡查找樹 311
第13章 圖 361
第14章 分而治之 438
第15章 貪心算法 461
第16章 動態(tài)規(guī)劃 473
第17章 回溯 490
第18章 遺傳算法 502
第19章 螞蟻算法 528
第20章 漢諾塔游戲 555
20.1 實戰(zhàn):漢諾塔問題 556
參考文獻 582