《學習JavaScript數據結構與算法(第2版)》是2018年11月人民郵電出版社出版的圖書,作者是[巴西]洛伊安妮·格羅納(Loiane Groner)。
基本介紹
- 書名:學習JavaScript數據結構與算法(第2版)
- 作者:[巴西]洛伊安妮·格羅納(Loiane Groner)
- ISBN:9787115467539
- 頁數:217頁
- 定價:49元
- 出版社:人民郵電出版社
- 出版時間:2018年11月
- 裝幀:平裝
- 開本:16開
內容簡介,圖書目錄,
內容簡介
本書首先介紹了JavaScript 語言的基礎知識以及ES6 和ES7 中引入的新功能,接下來討論了數組、棧、佇列、鍊表、集合、字典、散列表、樹、圖等數據結構,之後探討了各種排序和搜尋算法,包括冒泡排序、選擇排序、插入排序、歸併排序、快速排序、堆排序、計數排序、桶排序、基數排序、順序搜尋、二分搜尋,然後介紹了動態規劃和貪心算法等常用的高-級算法以及函式式編程,zui後還介紹了如何計算算法的複雜度。
本書適用於前端Web 開發人員,以及所有對JavaScript 數據結構與算法感興趣的讀者。
圖書目錄
第 1 章 JavaScript 簡介 1
1.1 JavaScript 數據結構與算法 1
1.2 環境搭建 2
1.2.1 **簡單的環境搭建 2
1.2.2 使用Web 伺服器(XAMPP) 4
1.2.3 使用Node.js 搭建Web 伺服器 5
1.3 JavaScript 基礎 6
1.3.1 變數 7
1.3.2 操作符 9
1.3.3 真值和假值 11
1.3.4 相等操作符(==和===) 12
1.4 控制結構 14
1.4.1 條件語句 14
1.4.2 循環 15
1.5 函式 16
1.6 JavaScript 面向對象編程 17
1.7 調試工具 18
1.8 ECMAScript 概述 19
1.9 ECMAScript 6 的功能 21
1.9.1 用let 替代var 聲明變數 21
1.9.2 常量 23
1.9.3 模板字面量 23
1.9.4 箭頭函式 24
1.9.5 函式的參數默認值 24
1.9.6 聲明展開和剩餘參數 25
1.9.7 使用類進行面向對象編程 27
1.10 ECMAScript 7 的功能 29
1.11 小結 30
第 2 章 數組 31
2.1 為什麼用數組 31
2.2 創建和初始化數組 32
2.3 添加元素 33
2.3.1 使用push 方法 33
2.3.2 插入元素到數組首位 34
2.4 刪除元素 34
2.5 在任意位置添加或刪除元素 36
2.6 二維和多維數組 36
2.6.1 疊代二維數組的元素 37
2.6.2 多維數組 38
2.7 JavaScript 的數組方法參考 39
2.7.1 數組合併 39
2.7.2 疊代器函式 40
2.7.3 ECMAScript 6 和數組的新功能 42
2.7.4 排序元素 46
2.7.5 搜尋 48
2.7.6 輸出數組為字元串 49
2.8 類型數組 50
2.9 小結 51
第3 章 棧 52
3.1 棧數據結構 52
3.1.1 創建棧 53
3.1.2 向棧添加元素 53
3.1.3 從棧移除元素 53
3.1.4 查看棧頂元素 54
3.1.5 檢查棧是否為空 54
3.1.6 清空和列印棧元素 54
3.2 ECMAScript 6 和Stack 類 56
3.3 用棧解決問題 59
3.4 小結 61
第4 章 佇列 62
4.1 佇列數據結構 62
4.2 創建佇列 63
4.2.1 向佇列添加元素 63
4.2.2 從佇列移除元素 63
4.2.3 查看佇列頭元素 64
4.2.4 檢查佇列是否為空 64
4.2.5 列印佇列元素 64
4.3 用ECMAScript 6 語法實現的Queue 類 66
4.4 優先佇列 66
4.5 循環佇列——擊鼓傳花 68
4.6 JavaScript 任務佇列 70
4.7 小結 70
第5 章 鍊表 71
5.1 鍊表數據結構 71
5.2 創建鍊表 72
5.2.1 向鍊表尾部追加元素 73
5.2.2 從鍊表中移除元素 75
5.2.3 在任意位置插入元素 77
5.2.4 實現其他方法 79
5.3 雙向鍊表 82
5.3.1 在任意位置插入新元素 82
5.3.2 從任意位置移除元素 85
5.4 循環鍊表 87
5.5 小結 88
第6 章 集合 89
6.1 構建數據集合 89
6.2 創建集合 89
6.2.1 has(value)方法 90
6.2.2 add 方法 91
6.2.3 remove 和clear 方法 91
6.2.4 size 方法 92
6.2.5 values 方法 93
6.2.6 使用Set 類 93
6.3 集合操作 94
6.3.1 並集 94
6.3.2 交集 95
6.3.3 差集 97
6.3.4 子集 98
6.4 ES6——Set 類 99
6.5 小結 101
第7 章 字典和散列表 102
7.1 字典 102
7.1.1 創建字典 102
7.1.2 使用Dictionary 類 105
7.2 散列表 106
7.2.1 創建散列表 106
7.2.2 使用HashTable 類 108
7.2.3 散列表和散列集合 109
7.2.4 處理散列表中的衝突 109
7.2.5 創建更好的散列函式 117
7.3 ES6——Map 類 118
7.4 ES6——WeakMap 類和WeakSet 類 118
7.5 小結 119
第8 章 樹 120
8.1 樹數據結構 120
8.2 樹的相關術語 121
8.3 二叉樹和二叉搜尋樹 121
8.3.1 創建BinarySearchTree 類 122
8.3.2 向樹中插入一個鍵 123
8.4 樹的遍歷 126
8.4.1 中序遍歷 126
8.4.2 先序遍歷 127
8.4.3 後序遍歷 128
8.5 搜尋樹中的值 129
8.5.1 搜尋**小值和**大值 130
8.5.2 搜尋一個特定的值 131
8.5.3 移除一個節點 133
8.6 自平衡樹 137
8.6.1 Adelson-Velskii-Landi 樹(AVL 樹) 137
8.6.2 更多關於二叉樹的知識 143
8.7 小結 143
第9 章 圖 144
9.1 圖的相關術語 144
9.2 圖的表示 146
9.2.1 鄰接矩陣 146
9.2.2 鄰接表 147
9.2.3 關聯矩陣 148
9.3 創建Graph 類 148
9.4 圖的遍歷 150
9.4.1 廣度優先搜尋 151
9.4.2 深度優先搜尋 156
9.5 **短路徑算法 162
9.5.1 Dijkstra 算法 163
9.5.2 Floyd-Warshall 算法 165
9.6 **小生成樹 166
9.6.1 Prim 算法 166
9.6.2 Kruskal 算法 168
9.7 小結 169
第 10 章 排序和搜尋算法 170
10.1 排序算法 170
10.1.1 冒泡排序 171
10.1.2 選擇排序 174
10.1.3 插入排序 175
10.1.4 歸併排序 176
10.1.5 快速排序 179
10.1.6 堆排序 183
10.1.7 計數排序、桶排序和基數排序(分散式排序) 186
10.2 搜尋算法 187
10.2.1 順序搜尋 187
10.2.2 二分搜尋 187
10.3 小結 189
第 11 章 算法模式 190
11.1 遞歸 190
11.1.1 JavaScript 調用棧大小的限制 191
11.1.2 斐波那契數列 191
11.2 動態規劃 193
11.2.1 **少硬幣找零問題 194
11.2.2 背包問題 196
11.2.3 **長公共子序列 198
11.2.4 矩陣鏈相乘 200
11.3 貪心算法 202
11.3.1 **少硬幣找零問題 203
11.3.2 分數背包問題 204
11.4 函式式編程簡介 205
11.4.1 函式式編程與命令式編程 205
11.4.2 ES2015 和函式式編程 206
11.4.3 JavaScript 函式式工具箱——
map、filter 和reduce 207
11.4.4 JavaScript 函式式類庫和數據結構 209
11.5 小結 209
第 12 章 算法複雜度 210
12.1 大O 表示法 210
12.1.1 理解大O 表示法 210
12.1.2 時間複雜度比較 212
12.1.3 NP 完全理論概述 214
12.2 用算法娛樂身心 216
12.3 小結 217