![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
希魔王的塔罗牌
前端学习中= =
展开
-
JavaScript数据结构——二叉搜索树
JavaScript中的搜索二叉树二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树二叉搜索树是一颗二叉树, 可以为空;如果不为空,满足以下性质:非空左子树的所有键值小于其根结点的键值非空右子树的所有键值大于其根结点的键值也就是左结点值想<根结点值<右节点值左、右子树本身也都是二叉搜索树二叉搜索树的操作insert(key):向树中插入一个新的键search(key):在树中查找一个键,如果结点存在,则返回true;如果不存在,则返回f原创 2021-03-06 09:50:38 · 283 阅读 · 0 评论 -
JavaScript数据结构——树
JavaScript中的树在使用数组存储时,根据下标值访问效率会很高,但是当想要使用元素来查找时,比较好的方法是对数组先排序,之后二分查找。由此所带来的问题是查找时需要大量的操作,效率就比较低了而链表对于插入与删除的操作效率虽然很高,但是查找效率依然很低,需要从头至尾访问一遍链表,直到找到。而对于哈希表,一方面空间利用率不高,而且哈希表中的元素是无序的,不能按照固定的顺序来遍历哈希表中的元素相比上面的结构,树结构的优点则更突出树的定义:树(Tree): n(n≥0)个结点构成的有限集合原创 2021-03-05 19:19:50 · 400 阅读 · 0 评论 -
JavaScript数据结构——字典
JavaScript中的字典字典的特点:键值一一对应字典和数组对比:字典可以非常方便的通过key来搜索对应的value, key可以包含特殊含义, 也更容易被人们记住字典和对象:在其他语言中字典和对象区分比较明显, 对象通常是一种在编译期就确定下来的结构, 不可以动态的添加或者删除属性,而字典通常会使用类似于哈希表的数据结构去实现一种可以动态的添加数据的结构d但在JavaScript中, 似乎对象本身就是一种字典. 所有在早期的JavaScript中, 没有字典这种数据类型, 因为完全可以使用原创 2021-03-05 11:53:37 · 2457 阅读 · 0 评论 -
JavaScript数据结构——集合
JavaScript中的集合集合通常由一组无序的、不能重复的元素构成可以视为特殊的数组,只不过不同的是其中的元素没有顺序,也就无法通过索引值访问到在ES6中其实已经包含了Set类集合的实现集合常见的操作add(value):向集合添加一个新的项remove(value):从集合移除一个值has(value):如果值在集合中,返回true,否则返回falseclear():移除集合中的所有项size():返回集合所包含元素的数量。与数组的length属性类似values():返回一个包原创 2021-03-05 11:03:13 · 179 阅读 · 1 评论 -
JavaScript数据结构——双向链表
JavaScript中的双向链表单向链表在遍历时只能从头到尾或者从尾遍历到头;所以单向链表可以轻松到达下一节点,但是回到上一个节点是很困难的而双向链表既可以从头遍历到尾, 又可以从尾遍历到头,链表的相联是双向的,一个节点既有向前连接的引用,也有向后连接的引用但是正因如此,双向链表在插入或者删除某个节点时,需要处理四个节点的引用,并且所占用内存空间也更大一些双向链表实现JavaScript 代码实现双向链表// 创建双向链表的构造函数function DoublyLinkedList() {原创 2021-03-05 10:46:15 · 143 阅读 · 1 评论 -
JavaScript数据结构——链表
JavaScript中的链表要储存多个元素,除了数组还可以选择链表链表在内存中不必是连续的空间链表的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(有些语言称为指针或者链接)组成链表优点:内存空间不是比是连续的. 可以充分利用计算机的内存. 实现灵活的内存动态管理链表不必在创建时就确定大小, 并且大小可以无限的延伸下去链表在插入和删除数据时, 时间复杂度可以达到O(1). 相对数组效率高很多链表缺点链表访问任何一个位置的元素时, 都需要从头开始访问(无法跳过第一个元素原创 2021-03-04 22:12:18 · 106 阅读 · 1 评论 -
JavaScript数据结构——优先队列
JavaScript中的优先队列普通队列在插入元素时只会放到后端,导致只能等待前面的数据处理完毕后才可以被处理而优先队列在插入元素时会考虑该数据的优先级,根据优先级确定插入顺序;其余方法和队列一致程序中的优先队列每个线程处理的任务重要性不同,可以通过设置优先级大小,来决定改线程在队列中被处理的顺序优先队列实现JavaScript 代码实现队列结构// 封装优先级队列function PriorityQueue() { var items = [] // 封装一个新的构造函数, 用于原创 2021-03-04 21:32:14 · 242 阅读 · 1 评论 -
JavaScript数据结构——队列
JavaScript中的队列队列(queue)是一种运算受限的线性结构只允许在表前端进行出队列操作,只允许在后端进行插入操作(FIFO First In First Out) 先进先出,后进后出程序中的队列结构线程队列:在多线程开发时,不可能无限制开启线程使用队列进行线程任务的处理线程队列依次启动线程,执行对应的任务栈结构实现栈常见的操作enqueue(element):向队列尾部添加一个(或多个)新的项dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移原创 2021-03-04 17:36:04 · 153 阅读 · 1 评论 -
JavaScript数据结构——栈
JavaScript中的栈栈(stack)是一种运算受限的线性结构LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间栈仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素总结:先进后出,后进先出程序中的栈结构函数调用栈:A(B(C(D()))): 即原创 2021-03-04 17:21:34 · 139 阅读 · 1 评论 -
JavaScript数据结构——数组
JavaScript中的数组在其他语言中数组通常都是固定长度并且只可以储存一系列的同一种数据类型的值,但在JavaScript中则不对其中存储的值以及长度加以限制但在开发时,最好要遵守原则创建数组let arr = new Array(1, 2, 3);let arr = [1, 2, 3]数组常见操作添加元素添加一个元素至数组最后位置arr.push(item)在数组首位插入一个元素arr.unshift(item)从数组指定位置添加项目,然后返回被删除的项目a原创 2021-03-03 23:49:15 · 155 阅读 · 1 评论