数据结构与算法
文章平均质量分 80
酒 客
这个作者很懒,什么都没留下…
展开
-
15_JavaScript数据结构与算法(十五)图
JavaScript 数据结构与算法(十五)图图的概念在计算机程序设计中,图也是一种非常常见的数据结构,图论其实是一个非常大的话题,在数学上起源于哥尼斯堡七桥问题。什么是图?图是一种与树有些相似的数据结构。实际上,在数学的概念上,树是图的一种。我们知道树可以用来模拟很多现实的数据结构,比如:家谱/公司组织架构等等。那么图长什么样子呢?或者什么样的数据使用图来模拟更合适呢?人与人之间的关系网互联网中的网络关系广州地铁图那么,什么是图呢?我们会发现原创 2021-12-05 15:18:29 · 129 阅读 · 0 评论 -
17_javaScript数据结构与算法(十七)排序算法
JavaScript实现排序算法一、大O表示法大O表示法:在计算机中采用粗略的度量来描述计算机算法的效率,这种方法被称为**“大O”表示法**在数据项个数发生改变时,算法的效率也会跟着改变。所以说算法A比算法B快两倍,这样的比较是没有意义的。因此我们通常使用算法的速度随着数据量的变化会如何变化的方式来表示算法的效率,大O表示法就是方式之一。常见的大O表示形式符号名称O(1)常数O(log(n))对数O(n)线性O(nlog(n))线性和对数乘积原创 2021-12-06 08:34:05 · 100 阅读 · 0 评论 -
数组去重的九种方法
数组去重方法总结—十二种 数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看。 在真实的项目中碰到的数组去重,一般都是后台去处理,很少让前端处理数组去重。虽然日常项目用到的概率比较低,但还是需要了解一下,以防面试的时候可能回被问到。一、利用ES6 Set去重(ES6中最常用)var obj={ name:'liu'}const arr=[1,1,2,3,5,6,6,7,{},{原创 2021-12-20 17:47:21 · 391 阅读 · 0 评论 -
14_JavaScript数据结构与算法(十四)红黑树
图解红黑树一、红黑树的五条规则红黑树除了符合二叉搜索树的基本规则外,还添加了以下特性:规则1:节点是红色或黑色的;规则2:根节点是黑色的;规则3:每个叶子节点都是黑色的空节点(NIL节点);规则4:每个红色节点的两个子节点都是黑色的(从每个叶子到根的所有路径上不可能有两个连续的红色节点);规则5:从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点;红黑树的相对平衡前面5条规则的约束确保了以下红黑树的关键特性:从根到叶子节点的最长路径,不会超过最短路径的两倍;结果就是这棵原创 2021-12-05 12:54:15 · 161 阅读 · 0 评论 -
13_JavaScript数据结构与算法(十三)二叉搜索树
JavaScript 数据结构与算法(十三)二叉搜索树二叉搜索树二叉搜索树(BST,Binary Search Tree),也称为二叉排序树和二叉查找树。二叉搜索树是一棵二叉树,可以为空。如果不为空,则满足以下性质:条件 1:非空左子树的所有键值小于其根节点的键值。比如三中节点 6 的所有非空左子树的键值都小于 6;条件 2:非空右子树的所有键值大于其根节点的键值;比如三中节点 6 的所有非空右子树的键值都大于 6;条件 3:左、右子树本身也都是二叉搜索树;如上图所示,树二和树三符合原创 2021-12-04 12:55:05 · 138 阅读 · 0 评论 -
12_JavaScript数据结构与算法(十二)二叉树
JavaScript 数据结构与算法(十二)二叉树二叉树二叉树的概念如果树中的每一个节点最多只能由两个子节点,这样的树就称为二叉树;二叉树的组成二叉树可以为空,也就是没有节点;若二叉树不为空,则它由根节点和称为其左子树 TL 和右子树 TR 的两个不相交的二叉树组成;二叉树的五种形态上图分别表示:空的二叉树、只有一个节点的二叉树、只有左子树 TL 的二叉树、只有右子树 TR 的二叉树和有左右两个子树的二叉树。二叉树的特性一个二叉树的第 i 层的最大节点树为:2(i-1),i &g原创 2021-12-04 12:53:39 · 92 阅读 · 0 评论 -
11_JavaScript数据结构与算法(十一)树
JavaScript 数据结构与算法(十一)树树结构什么是树?真实的树:树的特点:树一般都有一个根,连接着根的是树干;树干会发生分叉,形成许多树枝,树枝会继续分化成更小的树枝;树枝的最后是叶子;现实生活中很多结构都是树的抽象,模拟的树结构相当于旋转 180° 的树。树结构对比于数组/链表/哈希表有哪些优势呢?数组:优点:可以通过下标值访问,效率高;缺点:查找数据时需要先对数据进行排序,生成有序数组,才能提高查找效率;并且在插入和删除元素时,需要大量的位移操作;链表:原创 2021-12-04 12:50:46 · 93 阅读 · 0 评论 -
10_JavaScript数据结构与算法(十)哈希表
JavaScript 数据结构与算法(十)哈希表认识哈希表哈希表是一种非常重要的数据结构,几乎所有的编程语言都直接或者间接应用这种数据结构。哈希表通常是基于数组实现的,但是相对于数组,它存在更多优势:哈希表可以提供非常快速的 插入-删除-查找 操作。无论多少数据,插入和删除值都只需接近常量的时间,即 O(1) 的时间复杂度。实际上,只需要几个机器指令即可完成。哈希表的速度比树还要快,基本可以瞬间查找到想要的元素。哈希表相对于树来说编码要简单得多。哈希表同样存在不足之处:哈希表中的数据原创 2021-12-01 13:47:01 · 264 阅读 · 0 评论 -
09_JavaScript数据结构与算法(九)字典
JavaScript 数据结构与算法(九)字典字典字典特点字典存储的是键值对,主要特点是一一对应。比如保存一个人的信息数组形式:[19,"Tom", 1.65],可通过下标值取出信息。字典形式:{"age": 19, "name": "Tom", "height": 165},可以通过 key 取出 value。此外,在字典中 key 是不能重复且无序的,而 Value 可以重复。字典和映射的关系有些编程语言中称这种映射关系为字典,如 Swift 中的 Dictonary,Py原创 2021-12-01 11:22:16 · 95 阅读 · 0 评论 -
08_JavaScript数据结构与算法(八)集合
JavaScript 数据结构与算法(八)集合集合几乎每种编程语言中,都有集合结构。集合比较常见的实现方式是哈希表,这里使用 JavaScript 的 Object 进行封装。集合特点集合通常是由一组无序的、不能重复的元素构成。数学中常指的集合中的元素是可以重复的,但是计算机中集合的元素不能重复。集合是特殊的数组。特殊之处在于里面的元素没有顺序,也不能重复。没有顺序意味着不能通过下标值进行访问,不能重复意味着相同的对象在集合中只会存在一份。封装集合ES6 中的 Set原创 2021-12-01 10:36:38 · 70 阅读 · 0 评论 -
leetcode剑指offer第一周
leetcode剑指offer第一周十道题题解第一题:剑指 offer 09. 用两个栈实现队列**链接:**https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/代码题解:var CQueue = function() { this.items=[]//用数组实现数据的存储};/** * @param {number} value * @return {void} */CQueue原创 2021-11-30 15:06:01 · 113 阅读 · 0 评论 -
07_JavaScript数据结构与算法(七)双向链表
JavaScript 数据结构与算法(七)双向链表单向链表和双向链表单向链表只能从头遍历到尾或者从尾遍历到头(一般从头到尾)。链表相连的过程是单向的,实现原理是上一个节点中有指向下一个节点的引用。单向链表有一个比较明显的缺点:可以轻松到达下一个节点,但回到前一个节点很难,在实际开发中, 经常会遇到需要回到上一个节点的情况。双向链表既可以从头遍历到尾,也可以从尾遍历到头。链表相连的过程是双向的。实现原理是一个节点既有向前连接的引用,也有一个向后连接的引用。双向链表可以有效的解决单向链表原创 2021-11-30 11:37:05 · 122 阅读 · 0 评论 -
06_JavaScript数据结构与算法(六)单向链表
JavaScript 数据结构与算法(六)单向链表认识链表链表和数组链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同。数组存储多个元素,数组(或列表)可能是最常用的数据结构。几乎每一种编程语言都有默认实现数组结构,提供了一个便利的 [] 语法来访问数组元素。数组缺点:数组的创建需要申请一段连续的内存空间(一整块内存),并且大小是固定的,当前数组不能满足容量需求时,需要扩容。 (一般情况下是申请一个更大的数组,比如 2 倍,然后将原数组中的元素复制过去)原创 2021-11-30 09:11:32 · 119 阅读 · 0 评论 -
05_JavaScript数据结构与算法(五)优先队列
JavaScript 数据结构与算法(五)优先队列场景生活中类似优先队列的场景:优先排队的人,优先处理。 (买票、结账、WC)。排队中,有紧急情况(特殊情况)的人可优先处理。优先队列优先级队列主要考虑的问题:每个元素不再只是一个数据,还包含优先级。在添加元素过程中,根据优先级放入到正确位置。优先队列的实现代码实现// 优先队列内部的元素类class QueueElement { constructor(element, priority) { this.eleme原创 2021-11-29 14:29:32 · 72 阅读 · 0 评论 -
04_JavaScript数据结构与算法(四)队列
JavaScript 数据结构与算法(四)队列认识队列队列(Queue)是一种运算受限的线性表,特点:先进先出。(FIFO:First In First Out)受限之处:只允许在表的前端(front)进行删除操作。只允许在表的后端(rear)进行插入操作。生活中类似队列结构的场景:排队,比如在电影院,商场,甚至是厕所排队。优先排队的人,优先处理。 (买票、结账、WC)。队列图解队列在程序中的应用打印队列:计算机打印多个文件的时候,需要排队打印。线程队列:当开启多线程时原创 2021-11-29 14:02:50 · 79 阅读 · 0 评论 -
03_JavaScript数据结构与算法(三)栈
JavaScript 数据结构与算法(三)栈数组是一个线性结构,并且可以在数组的任意位置插入和删除元素。但是有时候,我们为了实现某些功能,必须对这种任意性加以限制。栈和队列就是比较常见的受限的线性结构。什么是栈栈(stack)是一种运算受限的线性表:LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间。类似于自动餐托盘,最后放上的托盘,往往先把拿出去使用。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元原创 2021-11-29 11:31:11 · 87 阅读 · 0 评论 -
02_JavaScript数据结构与算法(二)数组
JavaScript 数据结构与算法(二)数组几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。数组通常情况下用于存储一系列同一种数据类型的值。但在 JavaScript 里,数组中可以保存不同类型的值。但我们还是要遵守最佳实践,别这么做(大多数语言都没这个能力)。一、创建和初始化数组new Array()const daysOfWeek = new Array( "Sunday", "Monday", "Tuesday", "Wednesday",原创 2021-11-29 09:54:33 · 92 阅读 · 0 评论 -
01_JavaScript数据结构与算法(一)前言
JavaScript 数据结构与算法(一)前言什么是数据结构?数据结构的定义官方定义无民间定义“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。” — 《数据结构、算法与应用》“数据结构是 ADT(抽象数据类型 Abstract Data Type)的物理实现。” — 《数据结构与算法分析》“数据结构(data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法原创 2021-11-29 08:56:07 · 85 阅读 · 0 评论