JS数据结构
文章平均质量分 60
搞前端的小菜
热爱前端的小菜,低代码方向的爱好者
展开
-
二叉树的遍历【先序,中序,后序,层级】(详解)
摘要关于二叉树的遍历也是很常见的问题,而最常用的遍历也是标题中的说的四种方式。先序,中序和后序可以采用递归和迭代的方式来完成,也是深度优先的思想,后面会写出递归和迭代的方法。层级遍历主要是借用队列这种数据结构来进行对二叉树逐层遍历,是广度优先的思想。现在我们来写一下每一种的遍历方法。1.中序遍历先说一下中序遍历的方式是什么。对于二叉树的每个节点,从根节点开始,都要先遍历当前节点的左子节点,再遍历当前节点,然后是当前节点的右子节点。简单来说就是左子树 -> 根节点 -> 右子树。递原创 2021-09-16 11:42:30 · 2005 阅读 · 1 评论 -
JS实现二叉搜索树【增删改查】(详解)
摘要如果说一个数据结构的出现一定是因为它能解决某些问题,我们传统的线性表有数组和链表,前者在改查的优势更大,后者在增删的优势更大。但是往往在应用中这些功能我们是都需要用到的,在对数组或者链表的选择上就有了一些决定性。而二叉搜索树是具备了数组改查快和链表增删快的特点而生的一种数据结构。二叉搜索树具有二叉树的特点,并且,每个节点的左子树中所有节点都是比当前节点的值小的,每个节点的右子树所有节点都是比当前节点的值大的。正是这种特点,使它在数据操作和检索操作上具有很高的效率。OK,这一篇我们主要用JS来原创 2021-09-14 16:59:30 · 663 阅读 · 1 评论 -
JS实现桶排序(代码+讲解)
OK,最后再说一种排序,这一个篇章就结束了。说到桶排序,它的思想就是把分治用到极致,把一个序列分为一个个同,然后对每个桶进行排序,最后再进行整合。我们还是先用图解来进行对原理的解释,然后再用代码实现。OK,桶排序的思想有了,我们来说一下原理:第一步:确定这个序列要分为几个桶第二步:把每个元素放到对应的桶里面第三步:对每个桶进行排序第四步:对所有的桶进行整合现在我们用图来看一下,倘若我有这样一个序列现在我们要确定桶的数量,如和确定呢,这里面有一个计算公式桶的数量 = (最大值 - 最小原创 2021-04-19 12:31:18 · 1032 阅读 · 6 评论 -
JS实现快速排序(代码+讲解)
OK,排序这一个篇章也快要结束了。这一篇主要说的是快速排序,说的方式主要还是先说原理,然后再用代码来进行实现。所谓快速排序,就是分为三步走:第一步:选择第一个数字分离出来为基数第二步:然后将序列中大于基数的放在基数右边,小于基数的放在基数的左边第三步:然后对基数的左边和右边两个序列重复第二步和第三步这样就能形成一个有序的序列,那么重点是我们如何来实现第二步这个过程呢?我们用图解来说明一下。倘若我们有这样一个序列现在我们按步骤来,先把第一个元素4储存起来。然后定义两个指针分别指向第一原创 2021-04-19 09:55:20 · 10861 阅读 · 2 评论 -
JS实现归并排序(代码+讲解)
OK,最后还有三个排序了。这一篇来说一下归并排序。归并排序,顾名思义,就是把两个已经排好序的数组进行归并,成为一个新排序好的序列。如图所示假如我们有这样的两个已经排序好的序列我们怎么能够把这两个序列合并成一个新的有序序列呢?我们用两个变量i个j分别指向两个数组的第一个变量。然后比较这两个变量的大小。如果 arr【i】< arr【j】 : 那么就把arr【i】放在新数组里面,然后i向下移动一位。然后再比较arr【i】和arr【j】的值,现在4比3大。这样以此类推,总会有一个原创 2021-03-20 14:27:49 · 2136 阅读 · 4 评论 -
JS实现希尔排序(代码+讲解)
这一篇我们说一下希尔排序,当然了如果学习希尔排序那么就要知道插入排序的原理,因为希尔排序算的上是插入排序的进化版如果没有学习过插入排序那么就给一个传送门!https://blog.csdn.net/weixin_46726346/article/details/112912649?spm=1001.2014.3001.5501学习了插入排序我们就可以对希尔排序进行讲解原理并实现了。我们假设一下我们有这样一个数组首先我们要确定一个增量,这里面我们一般用数组长度的一半为初始值。那这里我们的增原创 2021-03-10 22:48:45 · 1005 阅读 · 1 评论 -
JS实现堆排序(代码+讲解)
OK,说到第四种排序,今天我们说一下堆排序。堆排序,顾名思义,就是使用堆这个数据结构对无序数组进行排序。那我们就先来说一下什么是堆。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如图所示,这就是一个大顶堆。如果我们可以每次将堆定的元素放到最后面,然后再重新形成堆结构。重复地再将堆顶的元素放到最后面,一直到堆只有一个元素,那么这个堆就变成了一个有序的数组。所以我们如果想要完成堆排序,就要先写一原创 2021-01-21 23:15:40 · 1475 阅读 · 0 评论 -
JS实现插入排序(讲解+代码)
OK,现在我们说第三种排序,插入排序,并且用JS语言来实现一下。所谓插入排序,就是把最小的(或者最大的),一次次插入到最前面,从而达到排序的效果。通俗易懂!!!现在我们来解释一下怎么插,插成一个有序的数组。原理就是,我们从第二个开始,比较当前元素前面的所有元素。找到一个比他大的元素,就把这个元素向后移一位。然后直到没有比他大的元素了,这个位置就是它的归宿。现在我们用画图来解释一下。如果我们有一个数组【4,3,2,1,0】。我们从第二个开始,由于4比他大,就要向后移,然后没有了,3就去4原创 2021-01-20 22:39:51 · 3542 阅读 · 1 评论 -
JS实现选择排序及优化(代码+讲解)
OK,说到第二种最简单的排序。除了冒泡就是选择排序了,如果光实现出一个选择排序,倒是一件很简单的事情。原理就是我们用两层for循环进行遍历,每次遍历都找到一个最小的,把这个最小的元素和未排序数组的第一个进行互换。这样就得到了一个排好序的数组了,很简单吧。附上代码。 <script> //原版 function sort(arr) { for (var i = 0; i < arr.length; i++) { l原创 2021-01-19 23:49:38 · 627 阅读 · 0 评论 -
JS排序--冒泡排序(实现及优化)
首先我们用JS实现冒泡排序的话,最常见的应该是这种。基础版: <script> function sort(arr) { for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) {原创 2020-12-17 20:07:07 · 929 阅读 · 1 评论 -
JS实现集合Set(代码+测试)
代码 <script> //定义集合类 function Set() { this.dataStore = []; } //添加方法(不能允许元素重复) Set.prototype.add = function (element) { if (this.dataStore.indexOf(element) < 0) { th原创 2020-12-16 10:42:31 · 307 阅读 · 0 评论 -
JS实现散列函数(代码+测试)
代码 <script> //创建散列函数类 function HashTable() { this.table = new Array(137); } //用霍纳算法计算哈希值 HashTable.prototype.betterHash = function (string) { const H = 37; var totle = 0;原创 2020-12-14 17:17:21 · 400 阅读 · 0 评论 -
JS实现字典(代码+测试)
代码<script> //用数组是因为数组也是Object类 function Dictionary(){ this.datastore = new Array(); } //添加方法(数组的key为字符串时,length不会变) Dictionary.prototype.add = function(key,value){ this.datastore[key] =原创 2020-12-14 14:40:25 · 641 阅读 · 0 评论 -
JavaScript实现单链表(最全方法版)
代码 <script> //Node节点类 function Node(element, index) { this.element = element; this.next = null; this.index = index; } //链表类 function List() { this.first = new No原创 2020-12-10 15:32:38 · 295 阅读 · 2 评论 -
JavaScript实现队列(代码+测试)
代码<script> function Queue() { this.dataStore = []; } Queue.prototype.enqueue = function (data) { this.dataStore.push(data) } Queue.prototype.dequeue = function () { if (!th原创 2020-12-09 20:45:16 · 160 阅读 · 0 评论 -
JavaScript实现栈(代码+测试)
代码实现<script> function Stack() { this.dataStore = []; this.top = -1; } Stack.prototype.push = function (data) { this.dataStore.push(data); this.top++; }; Stack.p原创 2020-12-08 20:54:31 · 167 阅读 · 0 评论