具体描述
本书首先介绍了JavaScript 语言的基础知识以及ES6 和ES7 中引入的新功能,接下来讨论了数组、栈、队列、链表、集合、字典、散列表、树、图等数据结构,之后探讨了各种排序和搜索算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序、顺序搜索、二分搜索,然后介绍了动态规划和贪心算法等常用的高级算法以及函数式编程,最后还介绍了如何计算算法的复杂度。
作者简介
Loiane Groner
花旗银行软件开发经理,负责海外项目的开发和团队管理;原IBM公司系统分析师及团队负责人;巴西坎皮纳斯Java用户组(CampinasJUG)领导者、圣埃斯皮里图Java用户组(ESJUG)协调人;巴西各大型技术会议特邀发言人;Sencha和Java技术布道者,通过博客(http://loianegroner.com)为软件开发社区撰稿,发表关于IT职业发展和常用开发技术的文章和视频。另著有《精通Ext JS》等书。
目录信息
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
· · · · · · (收起)
读后感
书上小错误太多了 上下文有些时候也不对应 有些小细节也不提及让读者自己去揣测作者的意思 不知道是翻译的问题还是原版就这样 读着很莫名其妙 不如阅读其他语言写的书 目前读到第十章 写的不够细 总体而言可以了解ES6的一些新特性以及应用 可以读但是没有必要 但是市场上js实现...
简单评价的话,如题目所述,是目前用 JavaScript 语言来讲解最基础的数据结构与算法最好的书。数组、链表、栈、字典、散列、树、图等等,该有的都有了。而且代码分开来一个个实现,思路讲解、代码结构都非常清晰。 书中对所有数据结构的实现,都是将方法创建在了每个实例上面(...
脉络很清晰,适合数据结构入门,但是发现文中的小bug不少,不知道是翻译过来造成的问题,还是原版也是这样。现在第二版好像已经发售了,很多问题应该会修正吧
这本书很薄(160页不到),从图书馆借来三四天,断断续续翻着读完。非常不错的一本数据结构与算法的入门书籍。不论是哪种开发方向,对想学习数据结构与算法的人来说都是个不错的选择,尤其是本身数据结构与算法功底偏弱的前端开发人员(这点上你大可不必认可,起码我是这样的)...
书上小错误太多了 上下文有些时候也不对应 有些小细节也不提及让读者自己去揣测作者的意思 不知道是翻译的问题还是原版就这样 读着很莫名其妙 不如阅读其他语言写的书 目前读到第十章 写的不够细 总体而言可以了解ES6的一些新特性以及应用 可以读但是没有必要 但是市场上js实现...
用户评价
终于找到一本能让我对JavaScript中的数据结构和算法产生真正兴趣的书了!说实话,我一直觉得算法这东西离我现实工作有点远,总觉得是那些ACM竞赛选手才需要的东西。但《学习JavaScript数据结构与算法(第2版)》彻底改变了我的看法。这本书不仅仅是列举了各种数据结构和算法,它更侧重于解释“为什么”和“如何”。比如,在介绍哈希表时,它并没有直接给出一堆代码,而是先从解决现实中的查找问题入手,然后自然而然地引出哈希表的设计思想和实现方式。这种循序渐进的讲解方式,对于我这样对理论基础稍显薄弱的读者来说,简直是福音。书中对每一种数据结构和算法的解释都非常到位,而且配合着清晰的JavaScript代码示例,让我能够亲手去实践,去体会其中的奥妙。我还喜欢它对于算法的分析,不仅仅是简单地给出时间复杂度和空间复杂度,还会分析其在不同场景下的优劣,这让我能够更好地理解如何在实际项目中做出最优选择。这本书真的让我感受到了代码背后蕴含的智慧。
读完《学习JavaScript数据结构与算法(第2版)》后,我最大的感受是,我以前对编程的理解太片面了。我之前以为只要能写出能运行的代码就可以了,但这本书让我认识到,真正优秀的程序员需要对底层原理有深入的理解,才能写出高效、可维护的代码。这本书的内容非常丰富,它系统地介绍了各种经典的数据结构,比如链表、栈、队列、树、图、堆,以及各种常用的算法,如排序、搜索、图算法等。作者在讲解时,用了大量生动形象的比喻和图示,让我这个对抽象概念不太敏感的人也能轻松理解。而且,书中提供的JavaScript代码实现都非常精炼和标准,让我学到了很多写出高质量JavaScript代码的技巧。我特别喜欢它在介绍每个算法时,都会从最简单的版本开始,然后逐步优化,最终达到最佳性能。这种讲解方式,让我不仅理解了算法本身,还学会了如何去分析和优化算法。这本书对我来说,不仅仅是一本技术书籍,更是一本能够启迪思维、提升编程境界的书籍。
这本书真是让我打开了新世界的大门!我一直对编程充满兴趣,但总觉得自己在算法和数据结构这块是个短板,看到市面上很多书要么太理论化,要么就直接上代码但缺乏深入讲解,让人望而却步。而《学习JavaScript数据结构与算法(第2版)》恰恰填补了这个空白。从最基础的概念讲起,比如数组、链表,到更复杂的树、图,甚至是堆和哈希表,作者都用了非常生动易懂的方式来解释。我特别喜欢它在介绍每个概念时,都会先给出实际应用场景,这样我就能明白为什么需要这个东西,而不是死记硬背。然后,它会循序渐进地展示如何用JavaScript来实现这些数据结构,代码示例清晰明了,并且附带了详细的解释,让我能跟得上思路。最棒的是,书中还穿插了大量的算法,比如排序、搜索,以及它们在不同数据结构上的应用。我以前对这些算法感到很头疼,但通过这本书,我不仅理解了它们的工作原理,还学会了如何在实际项目中选择最合适的算法来优化性能。虽然我还没有完全读完,但我已经能感受到它对提升我的编程思维和解决实际问题的能力有巨大的帮助。
这本书简直是为像我这样的JavaScript开发者量身打造的!我之前接触过一些算法和数据结构的书籍,但很多都偏向于Java或Python,看得我云里雾里,总觉得和我的日常开发有些距离。而《学习JavaScript数据结构与算法(第2版)》则完全不同,它全程使用JavaScript进行讲解,这让我感到非常亲切和实用。书中对各种数据结构的介绍,从概念的引入到JavaScript的实现,都做得非常扎实。例如,在讲解链表时,作者不仅解释了单向链表、双向链表,还详细说明了它们的插入、删除、查找等操作的时间复杂度,并且给出了相应的JavaScript代码实现。让我印象深刻的是,作者在介绍完每种数据结构后,都会立刻给出与之相关的经典算法,并分析它们的应用场景和优劣。这使得学习过程不再是枯燥的概念堆砌,而是充满了实战的乐趣。特别是对于一些我之前觉得很抽象的算法,比如递归、回溯,通过书中的例子,我才真正理解了它们的精髓。这本书的讲解风格也非常友好,不会一开始就抛出复杂的术语,而是层层递进,让读者能够逐步建立起对算法和数据结构的认知。
作为一名有几年JavaScript开发经验的开发者,我一直想在数据结构和算法方面有所提升,但市面上大部分书籍都过于理论化,或者更新速度跟不上JavaScript的发展。当我拿到《学习JavaScript数据结构与算法(第2版)》时,我感到非常惊喜。这本书的内容非常全面,从基础的栈、队列,到更高级的树、图,再到各种排序和搜索算法,都涵盖在内。最重要的是,它始终以JavaScript作为讲解语言,这使得学习过程非常贴近实际开发。我尤其欣赏书中对于每种数据结构和算法的解释方式,它不仅仅是给出定义和实现,更重要的是解释了它们的设计理念和适用场景。例如,在讲解二叉搜索树时,作者不仅说明了如何构建和查找,还详细分析了平衡二叉树的重要性,以及在不同操作下的性能表现。书中提供的代码示例都经过精心设计,易于理解和修改,并且附带了详细的注释,让我能够深入地掌握每一个细节。总而言之,这本书为我提供了一个系统学习JavaScript数据结构与算法的绝佳平台。
食之无味弃之可惜。真的不如python那本算法图解适合入门。不过提了两嘴ES6的内容也就算新内容了。
还不错
对于非科班来说,很难。对于科班来说,大概太基础吧……
图书馆翻了一半,是我见过最基础(简单)的算法书,对增长自信有用。怀疑作者是在黑前端,哈哈哈
图书馆翻了一半,是我见过最基础(简单)的算法书,对增长自信有用。怀疑作者是在黑前端,哈哈哈