自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 前端必会算法——克鲁斯卡尔算法

克鲁斯卡尔算法克鲁斯卡尔算法(加边法)选择最短的边进行连接要保证边连接的两端至少有一个点是新的点或者这个边是将两个部分进行连接的重复1—3步骤,直到将所有的点都连接到一起...

2022-04-18 12:23:26 238

原创 前端必学算法——普利姆算法

// 普利姆算法(加点法)// 1. 任选一个点作为起点// 2. 找到以当前选中点为起点路径最短的边// 3. 如果这个边的另一端没有被连通进来,那么就连接起来// 4. 如果这个边的另一端也早就被连进来了,则看倒数第二短的边// 5. 重复2--4步骤,直到将所有的点都联通为止...

2022-04-18 12:17:46 149

原创 前端必学算法——图的最小生成树问题

上一篇:前端必考算法——二叉树的Diff算法图的最小生成树问题最小生成树图示:普利姆算法(加点法)克鲁斯卡尔算法(加边法)下一篇:

2022-04-18 12:03:38 326

原创 前端必考算法——二叉树的Diff算法

图的最小生成树的问题代码演示:function Node(value) { this.value = value; this.left = null; this.right = null;}var a1 = new Node("a");var b1 = new Node("b");var c1 = new Node("c");var d1 = new Node("d");var e1 = new Node("e");var f1 = new Node("f");var

2022-04-14 22:51:33 1042

原创 前端必学算法——二叉树之左右子树互换后的比较

二叉树之左右子树互换后的比较图示:代码演示:function Node(value) { this.value = value; this.left = null; this.right = null;}var a1 = new Node("a");var b1 = new Node("b");var c1 = new Node("c");var d1 = new Node("d");var e1 = new Node("e");var f1 = new Node

2022-04-10 15:41:44 477

原创 前端必学算法——二叉树的比较

二叉树的比较图示:上图的代码演示function Node(value) { this.value = value; this.left = null; this.right = null;}var a1 = new Node("a");var b1 = new Node("b");var c1 = new Node("c");var d1 = new Node("d");var e1 = new Node("e");var f1 = new Node("f");v

2022-04-10 15:23:21 1002

原创 前端必学算法——二叉树的广度优先搜索之代码实现

二叉树的广度优先搜索代码演示function Node(value) { this.value = value; this.left = null; this.right = null;}var a = new Node("a");var b = new Node("b");var c = new Node("c");var d = new Node("d");var e = new Node("e");var f = new Node("f");var g = new

2022-04-10 14:57:04 1330

原创 前端必考算法——二叉树的深度优先搜索之代码实现

二叉树的深度优先搜索之代码实现代码演示:function Node(value) { this.value = value; this.left = null; this.right = null;}var a = new Node("a");var b = new Node("b");var c = new Node("c");var d = new Node("d");var e = new Node("e");var f = new Node("f");var g

2022-04-09 23:32:56 331

原创 前端必学算法——二叉树的深度搜索和广度搜索

二叉树的深度搜索和广度搜索二叉树的搜索,图的搜索,爬虫的逻辑,搜索引擎的爬虫算法。比如说看 G 是否在二叉树中?一,深度优先搜索看第一个节点 A 发现 A 不是此时,A 还有子节点,往下走,看 C 是不是,C 显然不是 G ,深度优先搜索,继续往下搜索,找到 F ,F 也不是,图中可以看到,F 没有子节点,返回到 C 。左面看完了,再看右边,再往下走是 G ,找到了。所以 G 在 二叉树中。图示:能往下找就往下找的叫深度优先搜索。深度优先搜索更适合探索未知二,广度优先搜索

2022-04-08 22:53:48 584

原创 前端必考算法——后序中序还原二叉树之代码演示

前序中序还原二叉树之代码演示代码演示:var middleOrder = ["f", "c", "g", "a", "d", "b", "e"]; // 中序遍历数组var postOrder = ["f", "g", "c", "d", "e", "b", "a"]; // 后序遍历数组function Node(value) { this.value = value; this.left = null; this.right = null;}function fn(middl

2022-04-07 19:04:20 366

原创 前端必考算法——前序中序还原二叉树之代码演示

前序中序还原二叉树之代码演示代码演示:var preamble = ["a", "c", "f", "g", "b", "d", "e"]; // 前序遍历数组var middleOrder = ["f", "c", "g", "a", "d", "b", "e"]; // 中序遍历数组function Node(value) { this.value = value; this.left = null; this.right = null;}function fn(preamb

2022-04-07 18:35:27 487

原创 前端必考算法——给出后序中序还原二叉树

给出后序中序还原二叉树给出后序中序还原二叉树,并写出前序遍历。中序遍历:FCG A DBE后序遍历:FGC DEB A后序遍历的特点:最后一个是根节点 根节点为 A根据中序遍历可知:A 的左子树有三个节点,右子树也有三个节点根据后序遍历可知:FGC是左子树,DEB是右子树 ;根据后序遍历的特点,C 为 左子树的根节点,C的左子树是F 右子树是G,B 为 右子树的根节点,B 的左子树是 D 右子树是 E如图:由图知后序遍历为:ACFGBDE...

2022-04-07 17:48:13 549

原创 前端必考算法——给出前序中序还原二叉树

给出前序中序还原二叉树给出前序中序还原二叉树,并写出后续遍历。前序遍历:A CFGBDE中序遍历:FCG A DBE根据中序遍历可知:A 是根节点 ,A 的左边是左子树,右边是右子树。根据前序遍历可知:C 是左子树的根节点,B是右子树的根节点。根据中序遍历可知:F 是 C 的左子树,G 是 C 的右子树;D 是 B 的左子树,E 是 B 的右子树。如图:有图知后序遍历为:FGCDEBA...

2022-04-07 17:32:33 166

原创 前端必会算法——二叉树的后序遍历

二叉树的后序遍历代码演示:function Node(value) { this.value = value; this.left = null; this.right = null;}var a = new Node("a");var b = new Node("b");var c = new Node("c");var d = new Node("d");var e = new Node("e");var f = new Node("f");var g = new No

2022-04-07 17:07:09 604

原创 前端必会算法——二叉树的中序遍历

二叉树的中序遍历代码演示:function Node(value) { this.value = value; this.left = null; this.right = null;}var a = new Node("a");var b = new Node("b");var c = new Node("c");var b = new Node("d");var d = new Node("e");var f = new Node("f");var g = new No

2022-04-07 16:59:47 889

原创 前端必会算法——二叉树的前序遍历

二叉树的前序遍历代码演示:function Node(value) { this.value = value; this.left = null; this.right = null;}var a = new Node("a");var b = new Node("b");var c = new Node("c");var d = new Node("d");var e = new Node("e");var f = new Node("f");var g = new No

2022-04-07 16:50:50 240

原创 前端必会算法——二叉树的遍历

二叉树的遍历顺序前序遍历:先根次序遍历先打印当前的, 再打印左边的, 再打印右边的, 先打印当前的;先打印A,再打印左子树的根节点C然后再打印子树 F G 接着打印右子树的根节点 B 再打印子树 D E前序遍历打印顺序:ACFGBDE中序遍历: 中根次序遍历;先打印左边的, 再打印当前的, 再打印右边的;中序遍历打印顺序:FCGADBE节点少的话,可以使用投影快速看出来,中序遍历的打印顺序(从左到右查看)投影图:后序遍历: 后根次序遍历;先打印左边的, 再打印

2022-04-06 16:03:08 530

原创 前端必会算法——二叉树中子树的概念

二叉树的基本概念(中子树)如图所示:C,B是子树的根节点,F G D E 也是子树的根节点,只不过这颗子树只有一层(整棵树只有一个节点)。在二叉树中,每个节点都认为自己是根节点。子树:二叉树中每一个节点或叶子节点都是一个子树的根节点左子树:A 的左边有一颗子树,对于 A 来说,它左边的子树是以 C 为根节点的。对于 A 来说,以 C 为根节点的子树是 A 的左子树。对于 C 来说 ,以 F 为根节点的子树,是 C 的左子树;以 G 为跟节点的子树,是 C 的右子树。右子树:A 的

2022-04-06 15:41:48 2693

原创 前端必会算法——二叉树之完全二叉树

完全二叉树完全二叉树的定义:国内定义:(1)叶子节点都在最后一层或倒数第二层(2)叶子节点都向左聚拢国际定义:(1)叶子节点都在最后一层或倒数第二层(2)如果有叶子节点,就必然有两个叶子节点这颗树结构,根据国内定义是完全二叉树(叶子节点都在最后一层或倒数第二层并且叶子节点都向左聚拢);但根据国外定义不是完全二叉树(叶子节点都在最后一层或倒数第二层,如果有叶子节点,就必然有两个叶子节点)。这颗树,是完全二叉树,符合国内和国际的定义。...

2022-04-06 15:22:01 1036

原创 前端必会算法——二叉树之满二叉树

二叉树树的度最多为2的树形结构二叉树的根节点为:A子节点:某个节点下面的节点父节点:上级节点叶子节点:CDE节点:B满二叉树:(1) 所有的叶子节点都在最底层(2) 每个非叶子节点都有两个子节点...

2022-04-06 15:04:31 365

原创 前端必会算法——树形结构

树形结构树形结构——有向无环图,树是图的一种树形结构有一个根节点,树形结构是没有回路的。演示图:树形结构分析:根节点:A叶子节点:下边没有其他节点了节点:既不是根节点,又不是叶子节点的普通节点树的度:这颗树有多少个分叉,这个棵树的度就为多少树的深度:树最深有几层,树的深度就为几...

2022-04-05 18:08:23 1179

原创 前端必会算法——二维数据结构

二维数据结构我们之前学到的链表,数组,栈,队列都是线性的一维数据结构。二维数据结构----有n行n列二维拓扑结构(图)- 离散数学中的图二维数组申明方式:四行八列的二位数据结构// 四行var arr = new Arrray(4);// 八列for (var i = 0; i < arr.length; i++) { arr[i] = new Array(8);}function Node(value) { this.value = value; th

2022-04-05 17:54:57 531

原创 前端必会算法——双向链表

双向链表双向链表就是我不但可以指向下一个,也可以指向上一个代码演示:function Node(value) { this.value; this.next = null; // 指向后面 this.prev = null; //指向前面}var node1 = new Node(1);var node2 = new Node(2);var node3 = new Node(3);var node4 = new Node(4);var node5 = new Node(5

2022-04-04 18:15:55 396

原创 前端必会算法——栈和队列

栈和队列栈(Stack)可以理解为是一个箱子,存放东西的容器。栈结构的特点:先入后出,栈相当于一个箱子,先放进去的东西被压在了下面。队列(Queue)可以理解为是一个管道。队列特点:先入先出栈结构代码实现:var arr = [];function push(value) { arr.push(value);}function pop() { return arr.pop();}push(1);push(2);push(3);console.lo

2022-04-04 18:03:14 772

原创 前端必会算法——标准快速排序

标准快速排序定义一个数组var arr = [6,9,8,7,2,5];它有两个指针,一个是左指针(L)一个是右指针(R)我们希望左侧的东西都要比6小,指针L所指位 9 比 6 大,按道理应该放到指针L的右边,具体放到哪里呢?此时要看指针R的所指位,可以看出 5 比 6 小,应该把 5 放到左边。所以把 5 和 9 交换位置即可。指针L继续右移一位,当前位置8 比 6 大,不动。此时,指针R左移一位,指向 2 ,2 比 6 小,交换 8 和 2 的位置。8 和 2 交换

2022-04-03 14:42:40 860

原创 前端必会算法——简单快速排序

简单快速排序快排思路,小的站左边,大的站右边。代码演示:var arr = [4, 2, 3, 1, 5, 6];function quickSort(arr) { if (arr === null || arr.length === 0) return []; //严谨性判断 // 1. 选队长 var captain = arr[0]; // 2. 小的站队长左边,大的站队长右边 var left = []; var right = []; for (var i =

2022-04-02 12:49:10 730

原创 前端必会算法——选择排序

选择排序var arr = [41, 1, 5, 6, 8, 9, 3, 4, 2]; function compare(a, b) { if (a < b) return true; else return false; } function exchange(arr, a, b) { var temp = arr[a]; arr[a] = arr[b

2022-04-02 12:09:44 676 1

原创 前端必会算法——冒泡排序

冒泡排序排序不是比较大小,排序的本质是比较和交换第一次比较67和23,交换位置第二次比较67和6,交换位置第三次比较67和5,交换位置第四次比较67和9,交换位置第五次比较67和1,,交换位置冒泡排序第一圈比完之后,会发现,把数组中最大的数推到了最后不难发现每次循环比较两个数,都会把最大的数放到后面,把小的数交换到前面来,这就是冒泡排序的原理代码实现:var arr = [67, 23, 6, 5, 9, 1];// 这个sort可以是冒泡排序也可以是

2022-04-01 22:44:47 1849

原创 前端必会算法——链表的逆置

链表的逆置代码演示:function Node(value) { this.value = value; this.next = null;}var node1 = new Node(1);var node2 = new Node(2);var node3 = new Node(3);var node4 = new Node(4);var node5 = new Node(5);node1.next = node2;node2.next = node3;node3.nex

2022-04-01 18:19:00 535

原创 前端必会算法——线性数据结构的递归遍历

线性数据结构的递归遍历数组是知道长度的,最好的遍历方式的循环var arr = [1,2,3,4];//循环遍历数组,常见,常用function ergodic(arr){ for(var i = 0;i<arr.length;i++){ console.log(arr[i]); }}ergodic(arr);递归遍历数组既不常见也不常用//递归遍历数组,不常见,不常用var arr = [1,2,3,4,5];function ergodic(a

2022-04-01 16:09:58 663

原创 前端必会算法——线性数据结构的遍历

线性数组的遍历遍历:将一个集合中的每一个元素进行获取并查看线性数据结构的递归遍历数组的递归遍历(数组是知道长度的,最好的遍历方式的循环)递归遍历数组既不常见也不常用var arr = [1,2,3,4];//循环遍历数组,常见,常用function bianArr(arr){ for(var i = 0;i<arr.length;i++){ console.log(arr[i]); }}bianArr(arr);//递归遍历数组,不常见,不常用f

2022-04-01 15:38:42 1061

原创 前端必会算法——线性数据结构之链表

线性数据结构之链表链表是常见的带有封装性质的数据结构。小方块是用来存放数据的,箭头是这个数据结构是由两个部分组成,其中一个部分存的是数据,另一个部分存的引用(下一个块的首地址)。a存了b的引用(在C语言中叫指针,面向对象语言中叫引用),通过a可以找到b,但是b并不是在a里面,只是a里面有个属性指向b。代码实现var b = { value: 2, next: null,};/** * a是一个对象, * 对象里有两个属性: * 一个是它的值, * 另一个是下一个,

2022-04-01 14:44:51 831

原创 前端必会算法——线性数据结构之数组

线性数据结构(一维数据结构)线性的数据结构强调储存与顺序。数组定长,此时数组的长度为8,如下图:现在忽然来了一个数字9,数组肯定是存不下的,不能直接放到数字8的后面,需要重新划分一个空间来存放(告诉操作系统,我需要一块长度为16的连续的空间)。需要先把之前的8个数复制过来,然后把第9个数,放进去,这就是扩容,这个过程又分配内存又复制数据,非常消耗性能。所以在使用数组的时候,先预估出来数组有多长,需要多少就设置数组的长度为多少。数组 a = [1,2,3,4,5,6,7,8];a[1],1[

2022-03-31 23:05:13 202

原创 前端必学算法——数据结构与算法概述

数据结构与算法有什么关系?可以容纳数据的结构被称为数据结构。算法是用来对数据结构进行处理的方法。数据结构是静态的;算法是动态的。

2022-03-31 21:27:34 291

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除