![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaScript数据结构与算法
DreamFive
这个作者很懒,什么都没留下…
展开
-
一、什么是数据结构与算法?
文章目录什么是数据结构与算法?一、数据结构二、什么是算法? 什么是数据结构与算法? 一、数据结构 通俗的来讲,它是是在计算机中,存储和组织数据的方式. 二、什么是算法? 一个有限的指令集,每条指令的描述不依赖于语言,接受一些输入,产生输出,一定在有限步骤之后终止. ...原创 2022-04-21 23:33:31 · 423 阅读 · 0 评论 -
二、栈结构
文章目录一、认识栈结构二、栈结构封装 一、认识栈结构 我们知道,数组是一种线性结构,并且可以在数组的任意位置插入和删除数据. 栈(stack)是一种受限的线性结构,后进先出(LIFO) 其限制是允许在表的一端进行插入和删除.这一端称为栈顶,相对的,另一端称为栈底 LIFO(last in first out)后进先出,就是后进入的元素,第一个弹出栈空间 向一个栈插入一个新元素称作进栈、入栈或压栈,从一个栈删除元素称为出栈或退栈,并且进栈和出栈都是从栈顶进行操作 二、栈结构封装 // 封装栈类 funct原创 2022-04-25 22:59:03 · 241 阅读 · 0 评论 -
三、队列结构
文章目录一、认识队列结构二、队列的封装三、优先级队列四、优先级队列的封装 一、认识队列结构 队列(Queue)一种受限的线性表,先进先出(FIFO) 受限之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作 二、队列的封装 有两种实现方式, 基于数组实现 基于链表实现 我们先基于数组实现,后面学习到链表时,再进行学习 function Queue(){ this.items = [] // 向队尾添加一个或者多个新的项 Queue.prototype.en原创 2022-04-26 00:00:55 · 1603 阅读 · 0 评论 -
四、链表结构
文章目录一、认识链表二、链表结构的封装 一、认识链表 链表和数组一样,可以用于存储一些列数据,但两者的实现机制完全不同. 数组的创建通常需要申请一段连续的内存空间,并且大小是固定的,所以当当前数组不能满足需求时,需要扩容.而且在数组开头和中间插入数据的成本很高,需要大量的元素位移惟一. 链表的特点和优势: 链表的元素在内存中不必是连续的内存空间 链表的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(指针)组成 链表在创建是不必确定大小,大小是可以无限延伸下去的 链表在插入和删除数据时,时间复杂原创 2022-04-27 00:23:29 · 206 阅读 · 0 评论 -
五、双向链表
文章目录一、什么是双向链表? 一、什么是双向链表? 其实上一节我们说的链表是单向链表.而双向链表的区别在于: 既可以从头遍历到尾,也可以从尾遍历到头 一个节点既有指向前一个元素的引用,也有一个指向后一个元素的引用 当然他也有一些缺点: 每次在插入或删除某个节点时,需要处理四个引用,而不是两个 相对于单向链表,必然占用的空间内存更大一些 但这些缺点和我们使用起来的方便程度相比,是微不足道的 class DoubleNode { constructor(data){ this.d原创 2022-05-01 22:25:02 · 221 阅读 · 0 评论 -
六、集合和字典
文章目录一、认识集合二、集合的封装三、集合间的操作四、字典 一、认识集合 集合通常是由一组无序的,不能重复的元素构成。通常使用 哈希表来实现 二、集合的封装 在 ES6中,Set 数据结构其实就是这样一种结构。但是我们还是来自定义的封装一下,来熟悉集合结构。 class Set{ constructor(){ this.items = {} } // 添加一个新的项 add(value){ if(this.has(value)) return原创 2022-05-06 00:08:02 · 976 阅读 · 0 评论 -
JavaScript 数据结构与算法十大经典排序算法-冒泡排序(一)
实现原理 简单来说就是实现的思想 冒泡排序只会操作相邻的两个数据 每次冒泡操作都会对相邻两个元素进行比较,看是否满足大小关系要求。如果不满足就让他俩互换 一次冒泡会让至少一个元素移动到它应该再度位置,重复 n 次,就完成了 n 个数据的排序工作 特点 优点:排序算法的基础,简单使用易于理解 缺点:比较次数多,效率较低 实现 //冒泡排序(未优化) const buddleSort = ar...原创 2019-08-02 18:18:25 · 196 阅读 · 0 评论 -
JavaScript 数据结构与算法十大经典排序算法-插入排序(二)
插入排序分为 直接插入排序 和优化后的 折半插入排序 与 希尔排序,通常所说的是直接插入排序。 一、直接插入 原理 通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。 步骤 从第一个元素开始,该元素认为是已经被排过序的 取出下一个元素,在已排序的元素序列中从后向前做对比 如果对比的元素(已排序)大于新元素,将该元素移到下一个位置,也就是往后移一位 重复步骤 3 ...原创 2019-08-05 23:49:40 · 116 阅读 · 0 评论 -
JavaScript 数据结构与算法十大经典排序算法-希尔排序(三)
一、希尔排序 希尔排序其实也是插入排序的一种,也叫缩小增量排序。 原理 先将整个待排序的记录序列分割成若干子序列 分别进行直接插入排序 待整个序列中的记录基本有序时,在对全体记录进行一次直接插入排序 简单来说,就是按一定的间隔对数列进行分组,然后在每一个分组中做直接插入排序,随后逐次缩小间隔,在每一个分组中做插入排序…直到间隔等于1,做一次插入排序后结束。 希尔排序的核心在于间隔序列的设定,...原创 2019-08-07 17:20:27 · 175 阅读 · 0 评论 -
JavaScript 数据结构与算法十大经典排序算法-选择排序(四)
原理 选择排序实现思路有点类似插入排序,也分排序区间和为排序区间。选择排序每次会从未排序区间中找到最小(最大)的元素,将其放到已排序的末尾 步骤 首先在未排序的序列中找到最小(最大)元素,存放到排序序列的起始位置(也是末尾,因为是第一次) 再从剩余未排序元素中继续寻找最小(最大)元素,然后放到已排序序列末尾 重复第二步,直到所有元素都排序完毕 实现 const selectSort = arr...原创 2019-08-08 11:14:36 · 141 阅读 · 0 评论 -
JavaScript 数据结构与算法十大经典排序算法-归并排序(五)
原理 归并排序,是先把数组从中间分成两部分,然后对前后两部分分别排序,再将排序好的连部分合并在一起。 核心思想是将两个有序的数列合并成一个大的有序序列。通过递归,层层合并,即为归并 ...原创 2019-08-21 10:32:28 · 179 阅读 · 0 评论 -
JavaScript 数据结构与算法十大经典排序算法-快速排序(六)
优点:快速排序的特点就是快,而且效率高。 缺点:需要另外声明俩个数组,浪费了内存空间 原理 先找到一个基准点(一般在数组的中部),然后把基准点从数组中取出,数组剩余元素依次与该基准点做对比,如果比它小,放左边,反之,放右边 左右分别用一个空数组去存储比较后的元素 最后递归上述操作,直到数组长度 <= 1 代码实现 const quickSort = arr => { if ( a...原创 2019-08-21 13:40:56 · 155 阅读 · 0 评论