第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
· · · · · · (
收起)