标签
内容简介
JavaScript 走出浏览器、借助 Node.js 等平台进入服务端编程之后,开发者同样需要链表、栈、队列、图这类经典的数据结构,也需要排序、查找等算法。本书讨论的正是这样一个问题:在数组即对象、全局变量随处可见、对象基于原型链的 JavaScript 语言环境中,如何真正把传统数据结构与算法实现出来,并在可读性、代码量与执行效率之间作出取舍。 全书从 JavaScript 的编程环境和对象模型讲起,先梳理数组的各种存取函数、可变函数与迭代器方法,为后面实现各种自定义结构打下基础。随后依次实现列表、栈、队列、链表(含双向链表与循环链表)、字典、散列(含开链法与线性探测法冲突处理)、集合、二叉树与二叉查找树,以及用图来建模网络关系,并给出深度优先搜索、广度优先搜索、最短路径与拓扑排序等图算法。最后进入算法部分:先用计时平台对比冒泡、选择、插入等基本排序,再介绍希尔排序、归并排序、快速排序;检索部分涵盖顺序查找、自组织数据与二分查找;末章讨论动态规划与贪心算法,以斐波那契数列、最长公共子串、背包问题、找零问题为例。每章配有练习,示例代码可直接运行修改。
编辑推荐
这本书的价值在于“就地取材”:它不要求你先去学 C 或 Java,而是直接用 JavaScript 把数据结构与算法亲手实现一遍。每一章都从一个具体问题出发,比如用栈做数制转换、判断回文和演示递归,用队列模拟方块舞会分配舞伴,用列表做一个影碟租赁管理的小程序,读起来更像是在跟着作者一起写代码,而不是在读定义。 书中对 JavaScript 语言自身的“坑”也有坦率讨论:数组本质上是对象、原型式继承与类的差异、散列函数如何设计才不至于让所有键挤在同一个桶里。第 8 章的冲突处理、第 12 章用计时平台横向比较各种排序的实际耗时,都是很有实操味道的部分。 需要提醒的是,本书成书较早(英文原版 2014 年),示例以 ES5 写法为主,没有涉及 ES6 的 Map、Set、class 以及现代前端框架中的场景。把它当作理解原理的第一本书很合适,但读完仍需结合新的语言特性与工程实践再做迁移。
适合谁读
适合
- 已经会写 JavaScript、想补上计算机基础的前端开发者
- 非计算机专业转行、没系统学过数据结构的学习者
- 准备技术面试、需要手写实现常见结构的人
- 想把课堂上的数据结构知识用 JavaScript 落地复现的学生
不适合
- 完全零编程基础、还不熟悉函数与对象的初学者
- 只想寻找 ES6、TypeScript 现代写法与工程实践的人
- 需要系统学习算法复杂度理论、竞赛级算法的高阶读者
阅读建议
- 先通读第 1、2 章,确认自己熟悉书中的对象与数组写法,再按顺序往下推进。
- 每章的练习不要跳过,尤其是散列冲突和图算法两章,动手实现比看懂更重要。
- 读第 12、13 章时用计时平台亲自跑一遍各种排序与查找,感受数据规模对性能的影响。
- 遇到 ES5 写法可顺手用现代语法改写,但注意保留原型式实现与 class 实现的差异对比。
出版社简介
人民邮电出版社
中国 · 成立于 1953 年
人民邮电出版社以科技、计算机与信息通信类图书见长,并由此延伸至摄影、艺术、软件学习与励志成长等门类,形成较为多元的出版方向。库内图书既涵盖《重构与模式(修订版)》《华为交换机学习指南(第二版)》等计算机与通信技术读物,也收录《小王子(中英法彩绘典藏纪念版)》《了不起的盖茨比》《假如给我三天光明》等双语典藏类作品;《北京十年:1980-1990》与《鬼刀 WLOP个人插画作品集》则体现其在摄影与艺术领域的布局。作者资源包括安东尼·圣埃克苏佩里、海伦·凯勒、Joshua Kerievsky、王达、张兆增与WLOP等。
目录
- 第1章 JavaScript的编程环境和模型
- 第2章 数组
- 第3章 列表
- 第4章 栈
- 第5章 队列
- 第6章 链表
- 第7章 字典
- 第8章 散列
- 第9章 集合
- 第10章 二叉树和二叉查找树
- 第11章 图和图算法
- 第12章 排序算法
- 第13章 检索算法
- 第14章 高级算法
常见问题
这本书适合零基础学 JavaScript 的人吗?
不太适合。书中默认读者已能熟练使用函数、对象和数组,重点在数据结构与算法本身。若还没写过完整项目,建议先补语言基础,再回来看这本。
书中代码是 ES5 还是 ES6?
以 ES5 写法为主,用函数和原型模拟类与集合,未涉及 Map、Set、class 等新特性。学习原理没问题,但迁移到现代项目时需要自行改写。
和《学习JavaScript数据结构与算法》有什么区别?
两者主题相近。本书更侧重用原生 JavaScript 手写实现、语言特性讨论较多,出版较早;后者覆盖 ES6 之后的语法和更多算法类型,可以互为补充。
需要边读边敲代码吗?
强烈建议。书中示例篇幅不大,但很多细节只有在运行、调试后才会真正理解,尤其是散列冲突处理和图遍历部分。
读完能应付技术面试吗?
能建立扎实的基本功,常见结构的实现思路都有覆盖。但面试还涉及复杂度分析、题目变体与语言新特性,需要配合刷题与专项复习。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。