编辑推荐
随着JavaScript成功走出客户端,在服务器端编程中得到日益广泛的应用,JavaScript程序员需要实现与C#或Java等传统面向对象编程语言相似的数据结构与算法。本书是用JavaScript描述数据结构与算法的开山之作,汇聚了作者多年的实战经验。这本实战指南通过丰富的示例,向读者透彻讲解了在JavaScript环境下,如何通过一系列存储机制(包括链表、栈、队列和图)高效地达到编程目的。
通过本书的学习,读者将能自如地选择*合适的数据结构与算法,并在JavaScript开发中懂得权衡使用。此外,本书也概述了与数据结构与算法相关的JavaScript特性。
本书主要内容如下。
数组和列表:*常用的数据结构。
栈和队列:与列表类似但更复杂的数据结构。
链表:如何通过它们克服数组的不足。
字典:将数据以键-值对的形式存储。
散列:适用于快速查找和检索。
集合:适用于存储只出现一次的元素。
二叉树:以层级的形式存储数据。
图和图算法:网络建模的理想选择。
算法:包括排序或搜索数据的算法。
高级算法:动态规划和贪心算法。
内容简介
在过去的几年里,JavaScript一直依赖于Node.还有js SpiderMonkey等,已经广泛应用于服务器端编程。JavaScript程序员迫切需要使用传统语言(比如C和Java)提供工具,包括传统的数据结构和传统的排序和搜索算法。《数据结构与算法JavaScript描述》讨论数组作为对象、无处不在的全局变量、如何在基于原型的对象模型等JavaScript语言环境下实现高效的数据结构和算法。
《数据结构与算法JavaScript描述》适合JavaScript程序员以及对JavaScript语言感兴趣的学习者,特别是在学校中没有系统学习过计算机科学相关课程的“跨界”程序员。
目录
- 推荐序
- 前言
- 第1章JavaScript的编程环境和模型
- 1.1JavaScript环境
- 1.2JavaScript编程实践
- 1.2.1声明和初始化变量
- 1.2.2JavaScript中的算术运算和数学库函数
- 1.2.3判断结构
- 1.2.4循环结构
- 1.2.5函数
- 1.2.6变量作用域
- 1.2.7递归
- 1.3对象和面向对象编程
- 1.4小结
- 第2章数组
- 2.1JavaScript中对数组的定义
- 2.2使用数组
- 2.2.1创建数组
- 2.2.2读写数组
- 2.2.3由字符串生成数组
- 2.2.4对数组的整体性操作
- 2.3存取函数
- 2.3.1查找元素
- 2.3.2数组的字符串表示
- 2.3.3由已有数组创建新数组
- 2.4可变函数
- 2.4.1为数组添加元素
- 2.4.2从数组中删除元素
- 2.4.3从数组中间位置添加和删除元素
- 2.4.4为数组排序
- 2.5迭代器方法
- 2.5.1不生成新数组的迭代器方法
- 2.5.2生成新数组的迭代器方法
- 2.6二维和多维数组
- 2.6.1创建二维数组
- 2.6.2处理二维数组的元素
- 2.6.3参差不齐的数组
- 2.7对象数组
- 2.8对象中的数组
- 2.9练习
- 第3章列表
- 3.1列表的抽象数据类型定义
- 3.2实现列表类
- 3.2.1append:给列表添加元素
- 3.2.2remove:从列表中删除元素
- 3.2.3find:在列表中查找某一元素
- 3.2.4length:列表中有多少个元素
- 3.2.5toString:显示列表中的元素
- 3.2.6insert:向列表中插入一个元素
- 3.2.7clear:清空列表中所有的元素
- 3.2.8contains:判断给定值是否在列表中
- 3.2.9遍历列表
- 3.3使用迭代器访问列表
- 3.4一个基于列表的应用
- 3.4.1读取文本文件
- 3.4.2使用列表管理影碟租赁
- 3.5练习
- 第4章栈
- 4.1对栈的操作
- 4.2栈的实现
- 4.3使用Stack类
- 4.3.1数制间的相互转换
- 4.3.2回文
- 4.3.3递归演示
- 4.4练习
- 第5章队列
- 5.1对队列的操作
- 5.2一个用数组实现的队列
- 5.3使用队列:方块舞的舞伴分配问题
- 5.4使用队列对数据进行排序
- 5.5优先队列
- 5.6练习
- 第6章链表
- 6.1数组的缺点
- 6.2定义链表
- 6.3设计一个基于对象的链表
- 6.3.1Node类
- 6.3.2LinkedList类
- 6.3.3插入新节点
- 6.3.4从链表中删除一个节点
- 6.4双向链表
- 6.5循环链表
- 6.6链表的其他方法
- 6.7练习
- 第7章字典
- 7.1Dictionary类
- 7.2Dictionary类的辅助方法
- 7.3为Dictionary类添加排序功能
- 7.4练习
- 第8章散列
- 8.1散列概览
- 8.2HashTable类
- 8.2.1选择一个散列函数
- 8.2.2一个更好的散列函数
- 8.2.3散列化整型键
- 8.2.4对散列表排序、从散列表中取值
- 8.3碰撞处理
- 8.3.1开链法
- 8.3.2线性探测法
- 8.4练习
- 第9章集合
- 9.1集合的定义、操作和属性
- 9.1.1集合的定义
- 9.1.2对集合的操作
- 9.2Set类的实现
- 9.3更多集合操作
- 9.4练习
- 第10章二叉树和二叉查找树
- 10.1树的定义
- 10.2二叉树和二叉查找树
- 10.2.1实现二叉查找树
- 10.2.2遍历二叉查找树
- 10.3在二叉查找树上进行查找
- 10.3.1查找小值和值
- 10.3.2查找给定值
- 10.4从二叉查找树上删除节点
- 10.5计数
- 10.6练习
- 第11章图和图算法
- 11.1图的定义
- 11.2用图对现实中的系统建模
- 11.3图类
- 11.3.1表示顶点
- 11.3.2表示边
- 11.3.3构建图
- 11.4搜索图
- 11.4.1深度优先搜索
- 11.4.2广度优先搜索
- 11.5查找短路径
- 11.5.1广度优先搜索对应的短路径
- 11.5.2确定路径
- 11.6拓扑排序
- 11.6.1拓扑排序算法
- 11.6.2实现拓扑排序算法
- 11.7练习
- 第12章排序算法
- 12.1数组测试平台
- 12.2基本排序算法
- 12.2.1冒泡排序
- 12.2.2选择排序
- 12.2.3插入排序
- 12.2.4基本排序算法的计时比较
- 12.3高级排序算法
- 12.3.1希尔排序
- 12.3.2归并排序
- 12.3.3快速排序
- 12.4练习
- 第13章检索算法
- 13.1顺序查找
- 13.1.1查找小值和值
- 13.1.2使用自组织数据
- 13.2二分查找算法
- 13.3查找文本数据
- 13.4练习
- 第14章高级算法
- 14.1动态规划
- 14.1.1动态规划实例:计算斐波那契数列
- 14.1.2寻找长公共子串
- 14.1.3背包问题:递归解决方案
- 14.1.4背包问题:动态规划方案
- 14.2贪心算法
- 14.2.1个贪心算法案例:找零问题
- 14.2.2背包问题的贪心算法解决方案
- 14.3练习
- 封面介绍
几个排序算法以后面试的时候可能用得着。手头已经有好几本数据结构有关的书,这本书不该买。
底层没讲,搞了一些简单的用法就出书了。不负责任,小学生入门比较合适。外加,代码实在不严谨,各种隐患问题。
感觉书中错误很多,另外很多内容不够深入了。
一个比较失望的点是,这本书有点像是数据结构与算法和JS的生硬结合,其实还比较期待一些更加符合JS习惯的做法,还有各个数据结构在JS下的高性能实现及性能测试。比如就很想看看 Typed Array 与数据结构的结合之类。
还是有所收获,但是不如预期的多,经常需要深入了解得自行查阅相关资料。总体读着感觉有点不值得。