阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      学习 JavaScript 数据结构与算法

      学习 JavaScript 数据结构与算法

      编辑推荐

      数据结构是计算机为了高效地利用资源而组织数据的一种方式。数据结构与算法是解决一切编程问题的基础。本书用 JavaScript 语言介绍了各种数据结构与算法,通俗易懂、循序渐进,有助于计算机科学专业的学生和刚刚开启职业生涯的技术人员探索 JavaScript。 相较于上一版,这一版新增了“ECMAScript 和 TypeScript 概述”“递归”“二叉堆和堆排序”和“算法设计与技巧”四章,介绍了 ECMAScript 2017 的新特性和 TypeScript 的基本功能,补充了双端队列、黑红树、堆排序算法,以及计数排序和基数排序等内容,另外还概述了 Fisher-Yates 随机算法和回溯算法(迷宫老鼠问题和数独解题器),等等。

      • 在数组、栈和队列中声明、初始化、添加和删除元素
      • 创建并使用链表、双向链表和循环链表
      • 用散列表、字典和集合存储的元素
      • 探索二叉树和二叉搜索树的用法
      • 使用冒泡排序、选择排序、插入排序、归并排序和快速排序等算法排序数据结构
      • 使用顺序搜索和二分搜索等算法搜索数据结构中的元素

      京东上购买

      这本书,可以在京东买到,推荐你点击下面的图片进入到京东上购买;

      之所以推荐点击上面的图片链接进行购买,是因为如果你通过我的链接购买这本书,我可以拿到1块钱左右的广告费;谢谢大家支持

      所有推广的收入,都用于本站(AXIHE.com)的维护和服务器支出。

      内容简介

      本书首先介绍了 JavaScript 语言的基础知识(包括 ECMAScript 和 TypeScript),其次讨论了数组、栈、队列、双端队列和链表等重要的数据结构,随后分析了集合、字典和散列表的工作原理,接下来阐述了递归的原理、什么是树以及二叉堆和堆排序,然后介绍了图、DFS 和 BFS 算法、各种排序(冒泡排序、选择排序、插入排序、归并排序、快速排序、计数排序、桶排序和基数排序)和搜索(顺序搜索、二分搜索和内插搜索)算法以及随机算法,接着介绍了分而治之、动态规划、贪心算法和回溯算法等高级算法以及函数式编程,最后还介绍了如何计算算法的复杂度。

      作者简介

      洛伊安妮·格罗纳(Loiane Groner)

      花旗银行软件开发经理,负责海外项目的开发和团队管理;原 IBM 公司系统分析师及团队负责人;巴西坎皮纳斯 Java 用户组(CampinasJUG)协调人;Sencha 和 Java 技术推广者,通过博客为软件开发社区撰稿,发表关于 IT 职业发展和常用开发技术的文章和视频,并经常受邀在各大技术会议上做报告。另著有《精通 Ext JS》等书。

      目录

      第 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
      目录
      目录