
数据结构和算法
进击的Bao
这个作者很懒,什么都没留下…
展开
-
JS实现数据结构(八):图
图论是一个非常大的话题图论是数学的一个分支,研究事物之间的关系,顶点表示事物,边表示两个食物的关系图有一组顶点和一组边,可以是有向的,也可以是无向的图的术语顶点:图中的一个节点边:顶点和顶点的连线相邻节点:由一条边连接的节点度:是一个顶点的相邻节点的数量简单路径:要求不包含重复的顶点回路:第一个顶点和最后一个顶点相同的路径称为回路无向图:边是有方向的有向图:边是无方向的无权图:边没有携带权重带权图:边有一定的权重图的表示法:邻接矩阵:二维数组邻..原创 2021-01-15 09:18:36 · 738 阅读 · 0 评论 -
Javascript实现几种排序算法
大O表示法:在算法描述中,用来粗略的度量算法的效率常见的大O表示形式 排序算法封装列表 方便测试冒泡排序:效率较低,但思路简单效率:比较次数O(N2),交换次数O(N2)选择排序:改进了冒泡排序选定第一个索引位置和后面的元素依次比较,找到除第一个元素意外以外的剩下元素最小的那个与第一个交换,然后用同样的方法逐个比较剩下的元素(每次选择最小或最大的元素)效率:比较次数O(N2),交换次数O(N)插入排序:插入排序是高级排序(希尔排序/快速排序)的..原创 2021-01-15 09:18:56 · 713 阅读 · 0 评论 -
JS实现数据结构(七):树
一、树结构是一种非线性结构,可以表示一对多的关系树结构的术语空树:n=0非空树:n>0树中有一个根节点(Root),用r表示其余节点可以分为m个互不相交的有限集T1……Tm,每个集合本身又是一棵树,称为原来树的子树二、二叉树树中每个节点最多只有两个子节点二叉树的5种形态二叉树的特性完美二叉树(满二叉树)除了最下一层的叶节点外,每层节点都有2个子节点完全二叉树除了最下一层的叶节点外,其他层节点数达到了最大个数,且从左往右叶节点连续原创 2021-01-14 16:15:48 · 873 阅读 · 0 评论 -
JS实现数据结构(六):哈希表
一、哈希表基于数组实现提供快速的插入-删除-查找操作插入和删除的时间接近O(1)的时间级哈希表的速度比树还要快,基本可以瞬间找到想要的元素哈希表相对于树来说编码要容易二、 哈希表相对于数组的一些不足哈希表中的数据是无序的,所以不能以某种方式来遍历的元素哈希表中key是不允许重复的三、哈希表的一些概念哈希化:将大数字转化成数组范围内下标的过程哈希函数:通常我们会将单词转成大数字,大数字在进行哈希化的代码实现放在一个函数里哈希表:最终将数据插入到的这个数组,对整个结构的原创 2021-01-14 16:03:18 · 837 阅读 · 0 评论 -
JS实现数据结构(五):集合
集合常见的实现方式是哈希表集合通常是一组无序的,不能重复的元素集合的特殊之处在于里面的元素没有顺序,不能重复;即不能通过下标值来访问,相同的对象在集合中只会存在一份ES6已经有Set类集合类的方法add(value):向集合添加一个新的项remove(value):从集合移除一个值has(value):如果值在集合中,返回true,否则返回falseclear():移除集合中的所有项size():返回集合所包含元素的数量,与数组的length属性类似values (..原创 2021-01-14 15:51:59 · 1722 阅读 · 3 评论 -
JS实现数据结构(四):双向链表
单向链表只能从从遍历到尾,缺点是可以轻松到达下一个节点,但是很难回到上一个节点双向链表可以从头遍历到尾,也可以从尾遍历到头,一个节点既有向前的引用,也有向后的引用双向链表结构- 双向链表方法append(element):向列表尾部添加一个新的项insert(position,element):向列表的特定位置插入一个新的项。get(position):获取对应位置的元素indexOf(element):返回元素在列表中的索引。如果列表中没有该元素则返回-1。update(position.原创 2021-01-14 15:48:23 · 2068 阅读 · 3 评论 -
JS实现数据结构(三):链表
链表也是一种常见的存储数据的线性结构数组的缺点:数组的创建需要申请一段连续的内存空间,大小是固定的,当容量需求不满足时需要扩容在数组开头或中间位置插入数据的成本很高,需要大量元素的位移链表的优势:链表的元素在内存中不必是连续的空间,实现灵活的内存动态管理链表的元素由一个存储元素本身的节点和一个指向下一个元素的引用(指针)链表不必在创建时确定大小,可以无限延伸下去链表在插入和删除数据时,时间复杂度达到O(1),效率较高链表的缺点链表想访问任何一个位置的元素时,都需..原创 2021-01-14 15:43:23 · 812 阅读 · 2 评论 -
JS实现数据结构(二):队列
队列(Queue),也是一种受限的线性结构,先进先出(FIFO)受限之处在于它只允许在表的前端进行删除,在表的后端进行插入操作队列结构有两种常见的方式:基于数组实现基于链表实现队列方法enqueue(element):向队列尾部添加一个(或多个)新的项dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素front():返回队列中第一个元素-一最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素只返回元素信息一与Stack类的peek..原创 2021-01-14 15:35:42 · 682 阅读 · 0 评论 -
JS实现数据结构(一):栈
数组是一种线性结构,可以在任意位置插入和删除数据栈和队列是受限的线性结构,后进先出或先进先出栈(stack),是一种受限的线性表,后进先出(LIFO)插入新元素,称为进栈删除元素,成为出栈程序中的栈实现:递归函数调用栈:函数之间的相互调用,A调用了B,B调用了C,C又调用了D,栈会把A、B、C、D依次压入栈,然后按相反的顺序弹出栈栈结构有两种常见的方式:基于数组实现基于链表实现栈方法:push(element):添加一个新元素到栈顶位置..原创 2021-01-14 15:32:54 · 863 阅读 · 0 评论 -
红黑树的规则和变换总结
红黑树的规则性质1:节点是红色或黑色性质2:根节点是黑色性质3:每个叶子节点都是黑色的空节点(NIL节点)性质4:每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径不能有两个连续的红色节点,但可以有两个黑色的)性质5:从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点红黑树的相对平衡以上特性确保了从根到叶子的最长可能路径不会超过最短可能路径的两倍长结果就是这个树基本是平衡的,虽然没有绝对平衡,但是依然是高效的为什么可以做到最长路径不超过最短路径的两倍?性质4决定了原创 2021-01-14 15:15:09 · 873 阅读 · 0 评论 -
dummy节点——leetcode链表题必备
做leetcode链表题的时候,需要额外考虑链表头部的特殊情况。但是,往往考虑不够周全,导致最后通过不断试错,修改代码。代码变得臃肿,可读性差。其实,引入一个dummy节点就可以解决大部分需要考虑头节点的链表题。什么是dummy节点?dummy(假的)节点是一个虚拟创建的节点,放在链表的最前面,指向头节点let dummy = new ListNode(); //创建新节点dummy.next = head; //让dummy指向头节点//...//...return dummy.next原创 2020-12-08 22:01:47 · 4183 阅读 · 0 评论 -
刷题必备!vscode里配置leetcode插件
在vscode中配置leetcode插件,让刷题更方便!准备vscode 官网自行下载node.js环境 具体可以参考这个 https://www.runoob.com/nodejs/nodejs-install-setup.htmlleetcode 账号安装插件在extension中搜索leetcode,如图上第一个所示,点击安装,安装完成后,左边侧栏会有leetcode的图标,这样就安装完成了。登陆leetcode首次使用会要求你登陆leetcode的账号点击第一个用账号密码登陆,原创 2020-12-06 14:50:56 · 2667 阅读 · 1 评论