學習 JavaScript 數據結構與算法, 3/e (Learning JavaScript Data Structures and Algorithms, 3/e)

學習 JavaScript 數據結構與算法, 3/e (Learning JavaScript Data Structures and Algorithms, 3/e)

作者: [巴西]洛伊安妮·格羅納(Loiane Groner)
出版社: 人民郵電
出版在: 2019-05-01
ISBN-13: 9787115510174
ISBN-10: 7115510172





內容描述


本書首先介紹了JavaScript語言的基礎知識(包括ECMAScript和TypeScript),其次討論了數組、棧、隊列、雙端隊列和鏈表等重要的數據結構,隨後分析了集合、字典和散列表的工作原理,接下來闡述了遞歸的原理、什麽是樹以及二叉堆和堆排序,然後介紹了圖、DFS和BFS算法、各種排序(冒泡排序、選擇排序、插入排序、歸並排序、快速排序、計數排序、桶排序和基數排序)和搜索(順序搜索、二分搜索和內插搜索)算法以及隨機算法,接著介紹了分而治之、動態規劃、貪心算法和回溯算法等高級算法以及函數式編程,最後還介紹瞭如何計算算法的復雜度。


目錄大綱


第1章JavaScript簡介1 
1.1 JavaScript數據結構與算法1 
1.2環境搭建2 
1.2.1最簡單的環境搭建2 
1.2.2使用Web服務器3 
1.2.3 Node.js http-server 5 
1.3 JavaScript基礎5 
1.3.1變量6 
1.3.2運算符8 
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小結20 
第2章ECMAScript和TypeScript概述21 
2.1 ECMAScript還是JavaScript 21
2.1.1 ES6、ES2015、ES7、ES2016、ES8、ES2017和ES.Next 21 
2.1.2使用Babel.js 23 
2.2 ECMAScript 2015+的功能24 
2.2.1用let替代var聲明變量24 
2.2.2模板字面量27 
2.2.3箭頭函數27 
2.2.4函數的參數默認值28 
2.2.5聲明展開和剩餘參數29 
2.2.6增強的對象屬性30 
2.2.7使用類進行面向對象編程31 
2.2.8乘方運算符33 
2.2.9模塊33 
2.3介紹TypeScript 39 
2.3.1類型推斷40 
2.3.2接口41 
2.3.3其他TypeScript功能43 
2.3.4 TypeScript中對JavaScript文件的編譯時檢查43 
2.4小結44 
第3章數組45 
3.1為什麼用數組45
3.2創建和初始化數組46 
3.3添加元素47 
3.3.1在數組末尾插入元素47 
3.3.2在數組開頭插入元素48 
3.4刪除元素49 
3.4.1從數組末尾刪除元素49 
3.4.2從數組開頭刪除元素49 
3.5在任意位置添加或刪除元素51 
3.6二維和多維數組51 
3.6.1迭代二維數組的元素52 
3.6.2多維數組53 
3.7 JavaScript的數組方法參考54 
3.7.1數組合併55 
3.7.2迭代器函數55 
3.7.3 ECMAScript 6和數組的新功能57 
3.7.4排序元素60 
3.7.5搜索63 
3.7.6輸出數組為字符串64 
3.8類型數組64 
3.9 TypeScript中的數組65 
3.10小結66 
第4章棧67
4.1創建一個JavaScript數據結構和算法庫67 
4.2棧數據結構68 
4.2.1創建一個基於數組的棧69 
4.2.2向棧添加元素69 
4.2.3從棧移除元素70 
4.2.4查看棧頂元素70 
4.2.5檢查棧是否為空71 
4.2.6清空棧元素71 
4.2.7使用Stack類71 
4.3創建一個基於JavaScript對象的Stack類73 
4.3.1向棧中插入元素73 
4.3.2驗證一個棧是否為空和它的大小74 
4.3.3從棧中彈出元素74 
4.3.4查看棧頂的值並將棧清空75 
4.3.5創建toString方法75 
4.4保護數據結構內部元素76 
4.4.1下劃線命名約定76 
4.4 .2用ES2015的限定作用域Symbol實現類77 
4.4.3用ES2015的WeakMap實現類77 
4.4.4 ECMAScript類屬性提案78
4.5用棧解決問題79 
4.6小結81 
第5章隊列和雙端隊列82 
5.1隊列數據結構82 
5.1.1創建隊列83 
5.1.2使用Queue類86 
5.2雙端隊列數據結構87 
5.2.1創建Deque類87 
5.2.2使用Deque類89 
5.3使用隊列和雙端隊列來解決問題90 
5.3.1循環隊列——擊鼓傳花遊戲90 
5.3.2回文檢查器91 
5.3.3 JavaScript任務隊列93 
5.4小結93 
第6章鍊錶94 
6.1鍊錶數據結構94 
6.2雙向鍊錶106 
6.2.1在任意位置插入新元素107 
6.2.2從任意位置移除元素109 
6.3循環鍊錶111 
6.3.1在任意位置插入新元素112 
6.3.2從任意位置移除元素113
6.4有序鍊錶114 
6.5創建StackLinkedList類116 
6.6小結117 
第7章集合118 
7.1構建數據集合118 
7.2創建集合類119 
7.2.1 has(element)方法119 
7.2.2 add方法120 
7.2.3 delete和clear方法120 
7.2.4 size方法121 
7.2.5 values方法122 
7.2.6使用Set類122 
7.3集合運算123 
7.3.1並集123 
7.3.2交集125 
7.3.3差集127 
7.3.4子集128 
7.4 ECMAScript 2015 ——Set類130 
7.5多重集或袋132 
7.6小結133 
第8章字典和散列表134 
8.1字典134
8.1.1創建字典類135 
8.1.2使用Dictionary類141 
8.2散列表142 
8.2.1創建散列表143 
8.2.2使用HashTable類146 
8.2.3散列表和散列集合147 
8.2.4處理散列表中的衝突147 
8.2.5創建更好的散列函數158 
8.3 ES2015 Map類159 
8.4 ES2105 WeakMap類和WeakSet類159 
8.5小結160 
第9章遞歸161 
9.1理解遞歸161 
9.2計算一個數的階乘162 
9.2.1迭代階乘162 
9.2.2遞歸階乘163 
9.3斐波那契數列165 
9.3.1迭代求斐波那契數166 
9.3.2遞歸求斐波那契數166 
9.3.3記憶化斐波那契數167 
9.4為什麼要用遞歸?它更快嗎167
9.5小結168 
第10章樹169 
10.1樹數據結構169 
10.2樹的相關術語170 
10.3二叉樹和二叉搜索樹170 
10.3.1創建BinarySearchTree類171 
10.3.2向二叉搜索樹中插入一個鍵172 
10.4樹的遍歷175 
10.4.1中序遍歷175 
10.4.2先序遍歷176 
10.4.3後序遍歷177 
10.5搜索樹中的值178 
10.5.1搜索最小值和最大值178 
10.5.2搜索一個特定的值180 
10.5 .3移除一個節點182 
10.6自平衡樹185 
10.6.1 Adelson-Velskii-Landi樹(AVL樹) 185 
10.6.2紅黑樹194 
10.7小結200 
第11章二叉堆和堆排序201 
11.1二叉堆數據結構201
11.1.1創建最小堆類202 
11.1.2創建最大堆類208 
11.2堆排序算法209 
11.3小結211 
第12章圖212 
12.1圖的相關術語212 
12.2圖的表示214 
12.2.1鄰接矩陣215 
12.2.2鄰接表215 
12.2.3關聯矩陣216 
12.3創建Graph類216 
12.4圖的遍歷219 
12.4.1廣度優先搜索220 
12.4.2深度優先搜索225 
12.5最短路徑算法231 
12.5.1 Dijkstra算法232 
12.5.2 Floyd-Warshall算法234 
12.6最小生成樹235 
12.6.1 Prim算法236 
12.6.2 Kruskal算法237 
12.7小結238 
第13章排序和搜索算法239
13.1排序算法239 
13.1.1冒泡排序239 
13.1.2選擇排序242 
13.1.3插入排序244 
13.1.4歸併排序245 
13.1.5快速排序247 
13.1.6計數排序251 
13.1.7桶排序253 
13.1.8基數排序255 
13.2搜索算法257 
13.2.1順序搜索257 
13.2.2二分搜索258 
13.2.3內插搜索260 
13.3隨機算法261 
13.4小結262 
第14章算法設計與技巧263 
14.1分而治之263 
14.2動態規劃265 
14.2. 1最少硬幣找零問題266 
14.2.2背包問題268 
14.2.3最長公共子序列270 
14.2.4矩陣鏈相乘272
14.3貪心算法274 
14.3.1最少硬幣找零問題274 
14.3.2分數背包問題275 
14.4回溯算法276 
14.4.1迷宮老鼠問題277 
14.4.2數獨解題器279 
14.5函數式編程簡介282 
14.5.1函數式編程與命令式編程283 
14.5.3 JavaScript函數式工具箱——map、filter和reduce 284 
14.5.4 JavaScript函數式類庫和數據結構286 
14.6小結286 
第15章算法複雜度287 
15.1大O表示法287 
15.1.1理解大O表示法287 
15.1.2時間複雜度比較289 
15.1.3 NP完全理論概述292 
15.2用算法娛樂身心293 
15.3小結294


作者介紹


洛伊安妮·格羅納(Loiane Groner)
花旗銀行軟件開發經理,負責海外項目的開發和團隊管理;原IBM公司係統分析師及團隊負責人;巴西坎皮納斯Java用戶組(CampinasJUG)協調人;Sencha和Java技術推廣者,通過博客為軟件開發社區撰稿,發表關於IT職業發展和常用開發技術的文章和視頻,並經常受邀在各大技術會議上做報告。另著有《精通Ext JS》等書。




相關書籍

電子商務概論與前瞻 -- 跨境電商、行動商務、大數據, 2/e

作者 朱海成

2019-05-01

Graphql in Action (Paperback)

作者 Buna Samer

2019-05-01

Go in Action (Paperback)

作者 William Kennedy Brian Ketelsen Erik St. Martin

2019-05-01