标签
内容简介
本书是一部以 JavaScript 为载体的数据结构与算法入门书,译自 O'Reilly 出版的 Data Structures and Algorithms with JavaScript。作者 Michael McMillan 兼具大学教师与程序员身份,全书围绕 JavaScript「数组即对象、全局变量随处可见、基于原型的对象模型」等语言特性,讨论如何在这种环境下实现传统编程语言(如 C++、Java)中常见的数据结构与算法,并提示在性能与实现之间如何权衡取舍。 全书共 14 章。开篇第 1 章梳理 JavaScript 的编程环境与语言模型,包括变量声明、算术与数学函数、判断与循环结构、函数、变量作用域、递归以及对象和面向对象编程,为后续章节统一代码基础。第 2 章起进入数据结构正题:先讲最常用的数组,覆盖存取函数、可变函数、迭代器方法、二维与多维数组、对象数组等;随后依次实现列表、栈、队列、链表(含双向链表与循环链表)、字典、散列(含开链法与线性探测法处理碰撞)、集合、二叉树与二叉查找树、图和图算法(深度优先、广度优先、最短路径、拓扑排序)。 最后三章聚焦算法:第 12 章在统一的数组测试平台上比较冒泡、选择、插入三种基本排序与希尔、归并、快速三种高级排序;第 13 章讲顺序查找、二分查找与自组织数据;第 14 章介绍动态规划(斐波那契数列、最长公共子串、背包问题)与贪心算法(找零问题、背包问题的贪心解法)。各章末尾均配有练习题,便于边读边动手实现。
编辑推荐
如果你是从前端转向计算机基础的「跨界」程序员,这本书的价值在于它不假定你学过 C 或 Java。作者把栈、队列、链表、散列、树、图这些教科书里的经典结构,全部用你每天在写的 JavaScript 重新实现一遍,代码短小、可直接运行,读起来没有语言迁移的额外负担。 全书结构清晰得像一条流水线:先补语言基础,再按线性结构、非线性结构、排序查找、高级算法的顺序推进,每章末尾都有练习题。第 12 章用统一的测试平台横向比较各种排序算法的实际耗时,第 8 章讨论散列碰撞的两种经典处理方式,这些内容对理解「为什么这样写更快」很有帮助。 需要提醒的是,本书篇幅不大,定位是入门引路而非深入剖析,对复杂度的理论推导着墨有限,代码也基于较早的 ECMAScript 版本。它更适合作为「第一次用 JavaScript 把数据结构写出来」的动手读物,配合更系统的算法教材一起使用效果更好。
适合谁读
适合
- 有 JavaScript 基础、想补计算机基础的前端开发者
- 跨专业转行、没在学校系统学过数据结构与算法的程序员
- 准备面试、需要亲手实现常见数据结构的求职者
- 希望用熟悉语言理解算法原理的自学读者
不适合
- 已系统学过数据结构与算法、想深入复杂度证明的读者
- 需要 ES6+ 现代写法与 TypeScript 版本的开发者
- 只想查阅现成代码库、不愿动手敲示例的读者
阅读建议
- 先通读第 1 章对齐语言基础,之后每章边读边把示例代码亲手敲一遍并运行。
- 把各章末尾的练习题当作检验标准,做不出来再回头重读该章实现部分。
- 读第 12、13 章时自己改测试数据规模,观察不同排序与查找方式的耗时差异。
- 配合一本系统的算法教材交叉阅读,补齐书中较简略的复杂度分析部分。
出版社简介
人民邮电出版社
中国 · 成立于 1953 年
人民邮电出版社以科技、计算机与信息通信类图书见长,并由此延伸至摄影、艺术、软件学习与励志成长等门类,形成较为多元的出版方向。库内图书既涵盖《重构与模式(修订版)》《华为交换机学习指南(第二版)》等计算机与通信技术读物,也收录《小王子(中英法彩绘典藏纪念版)》《了不起的盖茨比》《假如给我三天光明》等双语典藏类作品;《北京十年:1980-1990》与《鬼刀 WLOP个人插画作品集》则体现其在摄影与艺术领域的布局。作者资源包括安东尼·圣埃克苏佩里、海伦·凯勒、Joshua Kerievsky、王达、张兆增与WLOP等。
目录
- 推荐序
- 前言
- 第1章 JavaScript的编程环境和模型
- 第2章 数组
- 第3章 列表
- 第4章 栈
- 第5章 队列
- 第6章 链表
- 第7章 字典
- 第8章 散列
- 第9章 集合
- 第10章 二叉树和二叉查找树
- 第11章 图和图算法
- 第12章 排序算法
- 第13章 检索算法
- 第14章 高级算法
常见问题
这本书和《学习JavaScript数据结构与算法》有什么区别?
两者不是同一本书。本书作者是 Michael McMillan,2014 年由图灵引进,篇幅约 200 页,偏重逐个实现经典结构;《学习JavaScript数据结构与算法》作者是巴西的 Loiane Groner,内容更贴近现代 ES6+ 语法,页数与章节也更多,可按需选择。
需要什么基础才能读懂?
会写基本的 JavaScript 即可。第 1 章会复习变量、函数、作用域、递归和面向对象,因此不要求有 C 或 Java 背景,但最好能独立写出简单的函数和循环。
书中的代码能在 Node.js 里运行吗?
可以。书中示例以纯 JavaScript 实现为主,在 Node.js 或浏览器控制台中都能运行;个别章节涉及读取文本文件,在 Node.js 环境下更便于测试。
这本书适合当算法面试的唯一教材吗?
不太适合。它覆盖面偏基础,对复杂度推导和大量变式题型着墨有限。建议作为动手入门的第一本,再配合专门的算法教材与题库练习。
书里的内容会不会太旧?
书中代码基于较早的 ECMAScript 版本,没有涉及 ES6 的 class、Map、Set 等新语法。数据结构和算法的原理不会过时,但实际项目里可对照现代语法自行改写。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。