
数据结构
文章平均质量分 58
奋斗的小栗子
不断挖坑填坑的前端工程师
展开
-
数据结构之回溯算法
回溯算法0. 概念0. 概念一种渐进式的寻找并构建问题及解决方案的策略。从第一个动作出发并使用这个动作解决问题,如果问题不能解决,就回溯,使用下一个动作尝试解决,依次类推。原创 2021-07-09 16:25:02 · 247 阅读 · 0 评论 -
数据结构之贪心算法
贪心算法0. 概念1. 最少硬币找零2. 分数背包问题0. 概念贪心算法追求的是一种近似解决问题的技术。最后得到的方案可能不是最优方案。1. 最少硬币找零从尽可能使用大面额的零钱来找零。function minCoinChange(coins, amount) { const cache = []; let total = 0; for (let i = coins.length - 1; i >= 0; i--) { const coin = coins[i];原创 2021-07-08 16:38:59 · 155 阅读 · 0 评论 -
数据结构之动态规划
这里写目录标题1. 动态规划1.1 最少硬币找零1. 动态规划1.1 最少硬币找零采取分而治之的方式实现功能。将大问题划分成小问题,通过解决小问题,进而解决大问题。创建缓存变量对象,保存小问题的解决方案找到金额数是1时,找零的最佳方案。找到金额数是2时,找零的最佳方案。找到金额数是3时,找零的最佳方案。…function minCoinChange(coins, amount) { const cache = []; const makeChange = (value) =原创 2021-07-08 15:47:47 · 406 阅读 · 0 评论 -
数据结构之搜索
数据结构之搜索1. 线性搜索2. 二分搜索1. 线性搜索从头开始和要查找的元素作比较,知道找到目标元素位置。2. 二分搜索将数组排序取数组中间值,用中间值和目标值作比较。如果选中值是待搜索值,那么算法执行完毕(值找到了)如果中间值大于目标值,中间值左侧的值,执行第2步和第3步如果中间值小于目标值,中间值右侧的值,执行第2步和第3步function binarySearch(array, key, compareFn = defaultCompareFn) { array = q原创 2021-07-06 09:28:07 · 253 阅读 · 0 评论 -
数据结构之排序算法
排序算法0. 比较函数1. 冒泡排序2. 选择排序3. 插入排序4. 归并排序5. 快速排序6. 计数算法7. 桶排序0. 比较函数const COMPARE = { LESS_THAN: '-1', EQUALITY: '0', BIGGER_THAN: '1'}const defaultCompareFn = (a, b) => { if (a > b) { return COMPARE.BIGGER_THAN; } else if (a === b原创 2021-07-05 10:52:14 · 416 阅读 · 0 评论 -
数据结构之二叉搜索树
数据结构之树1. 相关术语2. 二叉搜索树2.1 节点对象2.2 比较函数2.3 树对象1. 相关术语第一个节点叫做根节点包含至少一个子节点的节点叫做内部节点没有子节点的节点叫做叶节点2. 二叉搜索树左侧的子节点小于父节点,右侧的子节点大于父节点。insert(key) 插入一个元素search(key) 查找树中是否包含key元素,是返回true, 否返回falseinOrderTraverse() 中序遍历,以从小到大的顺序遍历所有节点。preOrderTraverse()原创 2021-06-28 08:58:33 · 304 阅读 · 0 评论 -
数据结构之递归
递归1. 概念2. 实例2.1 数字阶乘2.2 斐波那契数2.3 记忆化斐波那契数1. 概念函数内部调用函数自身就是递归。在编写递归的函数的时候原则:找到最小单元。找到终止条件2. 实例2.1 数字阶乘// 数字阶乘, 0的阶乘是1// 1. 迭代方式function factorialInteractive(num) { if (typeof num !== 'number' || num < 0) return undefined; let total = 1;原创 2021-06-23 16:46:31 · 110 阅读 · 0 评论 -
数据结构之字典和散列表
字典和散列表1. 字典2. 散列表1. 字典set(key, value) 向字典中添加新元素,如果key已经存在,原来的值会被覆盖。remove(key) 删除字典中的元素。get(key) 获取字典中的元素。size() 获取元素个数。hasKey(key) 是否包含某个键。clear() 清空字典。keys() 获取所有键。values() 获取所有值。keyValues() 返回所有[key, value]。isEmpty() 字段是否为空。forEach(callbac原创 2021-06-23 11:29:01 · 347 阅读 · 0 评论 -
数据结构之集合
数据结构之集合1. 手写集合2. 集合的运用3. 多重集1. 手写集合集合是一种保存不重复数据的数据结构,和ES6中的Set类类似。add(element) 添加元素delete(element) 删除元素has(element) 是否包含某元素clear() 删除所有元素size() 返回元素个数values() 返回由所有元素组成的数组class SetCustom { constructor() { this.items = {}; } add(elemen转载 2021-06-22 15:58:48 · 251 阅读 · 0 评论 -
数据结构之链表
数据结构之链表1. 单向链表2. 双向链表1. 单向链表push(element) 向链表后端添加元素insert(element, position) 向某个位置插入元素getElementAt(index) 获取某个位置的元素remove(element) 从链表中移除元素indexOf(element) 获取元素的位置索引removeAt(index) 移除某个位置上的元素size() 获取元素个数isEmpty() 链表是否为空// 节点对象class Node { c原创 2021-06-22 10:25:42 · 284 阅读 · 2 评论 -
数据结构之队列
数据结构之队列1. 概念2. 基于{}的队列3. 双端队列1. 概念队列是一种基于先进先出原则的数据结构,从队列后端添加新元素,从队列前端删除元素。2. 基于{}的队列enqueue(element) 向队列后端添加元素dequeue() 从队列前端删除元素,返回被删除的元素peek() 返回队列中的第一个元素isEmpty() 队列是否为空。true表示为空,false表示非空size() 队列中元素的个数。clear() 清空队列。class Queue { construc原创 2021-06-18 10:27:17 · 95 阅读 · 0 评论 -
数据结构之栈
栈1. 概念2. 基于数组的栈3. 基于{}的栈4. 私有属性4.1 通过Symbol实现4.2 通过WeakMap实现1. 概念栈是一种遵循后进先出的有序集合。添加的新元素或者要删除的元素都位于栈顶,另一端叫栈底。新元素都靠近栈顶,旧元素都接近栈底。2. 基于数组的栈通过数组来保存栈中的元素。push(element) 向栈中添加元素。pop() 删除栈顶的元素,返回被删除的元素。peek() 返回栈顶的元素。isEmpty() 判断栈是否是空栈。true表示栈为空,false表示栈是非原创 2021-06-16 15:10:11 · 68 阅读 · 0 评论