
JS数据结构与算法
hcq29
29的前端之路
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【JS数据结构与算法】根据二叉树带有#号的层次遍历结果[8,8,7,9,2,'#','#','#','#',4,7]创建二叉树
前言为了实现二叉树的有关操作,我们必须要创建出二叉树结构,而不是单纯的使用数组或者是题目给出的用例;比如剑指offer中的: 二叉树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)用例:{8,8,7,9,2,#,#,#,#,4,7},{8,9,2}对应输出应该为:true根据用例给出了二叉树的各个元素,但是具体的结构却...原创 2020-02-10 19:50:57 · 625 阅读 · 0 评论 -
【JS数据结构与算法】希尔排序、快速排序的算法实现
文章目录前言前言前面已经介绍的几种简单的排序算法,在正式进入高级排序算法之前,我们再回顾一下插入排序的主要思想:提取一个标记元素,它左边的数据构成局部有序的序列,右边的数据为无序序列,再讲无序序列的每一个元素插入到有序序列的相应位置中。假如有这样一个序列:当排列到最后一个元素1的时候,是以下的结构:...原创 2019-11-19 23:42:41 · 305 阅读 · 0 评论 -
【JS数据结构与算法】冒泡、选择、插入排序算法的实现
前言前面已经对排序算法进行创建了一个列表类:【JS数据结构】排序算法列表的封装下面一起来学习如何实现几个常见的排序算法!正文1、冒泡排序最基础也是最简单的排序算法。主要思路:第一步,比较相邻的元素,如果左边的数比右边的数要大,那么就交换它们两个。第二步,向右移动,对每一对相邻元素进行第一步操作。直到列表的最后一对操作完毕,最终确定最后一个元素为最大值。第三部,重复第一和第二步的...原创 2019-11-06 17:14:07 · 436 阅读 · 2 评论 -
【JS数据结构与算法】队列(Queue)、队列的封装及其应用
目录1、什么是队列?2、队列的封装3、队列的检验4、队列的应用1、什么是队列?队列(Queue)是一种特殊的线性表,先进先出(FIFO,First In First Out)特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。...原创 2019-07-29 09:35:49 · 514 阅读 · 0 评论 -
【JS数据结构与算法】优先级队列 PriorityQueue
目录1、创建内部类。2、定义属性3、优先级队列中插入元素的封装。4、代码检验5、完整代码与队列相比:优先级队列的每个元素都有一个优先权。1、创建内部类。首先,这里需要封装一个内部类。表示可以通过此类来创建一个带权值的元素。 // 在PriorityQueue重新创建一个类,可以理解为内部类 function QueueElement(el...原创 2019-07-30 11:10:04 · 987 阅读 · 0 评论 -
【JS数据结构与算法】认识哈希表
目录一、什么是哈希表?二、哈希表的优势。三、哈希表与数组相比较。四、数据的存储。方法一:ASCII编码之和方法二:幂的连乘五、方法二改进——哈希化六、解决冲突一:链地址法(拉链法)。二:开放地址法。1.线性探测法:线性的查找空白的地方进行存放。2.二次探测法,第一次散列产生哈希地址冲突,经过另外一个散列函数(哈希函数)对冲突结果进行处理。3.再哈...原创 2019-08-12 22:45:12 · 769 阅读 · 0 评论 -
【JS数据结构与算法】哈希表的封装及其相关操作方法
目录一、哈希表相关操作方法的前提二、哈希表的封装三、效率提升四、方法实现。1、向哈希表添加元素put(key, value)。2、获取某个元素的值get(key)。3、删除操作remove(key)4、其他方法5、代码测试五、完整代码一、哈希表相关操作方法的前提如果还不了解什么是哈希表,可以去看博文:认识哈希表和实现哈希函数。这里介绍的是链地址法。...原创 2019-08-15 20:34:03 · 334 阅读 · 0 评论 -
【JS数据结构与算法】实现哈希函数
目录一、优秀的哈希函数1、幂的连乘2、霍纳法则(秦九韶算法)3、如何做到均匀分布。二、实现哈希函数一、优秀的哈希函数在构造哈希表之前,我们需要一个哈希函数对数据进行哈希化。那这个哈希函数怎么实现呢,根据前面一篇博客【JS数据结构】认识哈希表,我们已经认识了什么是哈希表以及为什么需要设计一个哈希函数。其实就是要达到两个目的:能够快速地计算,快速地获取hashC...原创 2019-08-14 12:36:21 · 2371 阅读 · 0 评论 -
【JS数据结构与算法】双向链表(DoublylinkedList)封装及其方法
目录双向链表结构双向链表的封装一、追溯方法(append(data))二、toString()的两种方式。1、forwardString()(返回正向遍历的节点字符串形式)2、backwardString() (返回反向遍历的节点字符串形式)3、toString() (由于列表项使用了Node类,就需要重写继承自JavaScript对象默认的toString方法,...原创 2019-08-02 10:52:57 · 867 阅读 · 0 评论 -
【JS数据结构与算法】栈(Stack)的封装及应用
目录1、什么是栈?2、栈的封装3、栈的检验4、栈的应用1、什么是栈?栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为...原创 2019-07-28 09:44:29 · 536 阅读 · 0 评论 -
【JS数据结构与算法】单向链表的封装及其方法
目录一、什么是链表?二、链表的封装三、追溯方法append(element)四、toString()五、inset(position, element)六、get(position)七、indexOf(element)八、upDate(position, element)九、removeAt(position)十、remove(element)十一、判断...原创 2019-07-29 22:37:04 · 933 阅读 · 0 评论 -
【JS数据结构与算法】集合
目录一、数据结构中的集合有什么特点。二、集合的封装。三、集合相关操作。1、向集合添加一个新的项,方法add(value)。2、方法has(value),判断集合是否已经存在某元素。3、clear()移除集合中的所有项。4、remove(value)从集合中移除一个值。5、获取集合的大小。6、获取集合中所有的值。四、集合之间的操作。1、A∪B。2、...原创 2019-08-09 23:03:38 · 1140 阅读 · 1 评论 -
【JS数据结构与算法】认识树
目录一、生活中的树的特点二、模拟成树结构三、树的定义四、树的基本术语五、树结构的表示形式六、二叉树1、二叉树的定义2、二叉树的属性3、二叉树的五种形态4、二叉树的特殊形态5、二叉树的存储结构5.1 顺序存储结构5.2 链式存储结构一、生活中的树的特点生活中的树,长这样:它通常只有一个根,与根相连接的是树干。 树干上又有若干个树枝,树...原创 2019-08-16 16:38:19 · 461 阅读 · 0 评论 -
【JS数据结构与算法】二叉搜索树
目录一、什么是二叉搜索树二、二叉搜索树的优点一、什么是二叉搜索树二叉搜索树(BST , Binary Search Tree),也称为二叉排序树或二叉查找树。二叉搜索树是一棵二叉树,也是可以为空。如果二叉搜索树不为空,那么,满足以下条件:非空左子树的所有键值小于其根节点的键值。 非空右子树的所有键值大于其根节点的键值。 左右子树本身也是二叉搜索树。二、二叉搜索...原创 2019-08-17 12:55:59 · 402 阅读 · 0 评论 -
【JS数据结构与算法】二叉搜索树的封装
采用链式存储结构封装搜索二叉树思想:由二叉树的定义可知,二叉树的结点由一个数据元素和分别指向左、右结点的两个分支构成,所以表示二叉树的链表中的结点至少要包含三个域。data:数据域。 lchild:左指针域。 rchild:右指针域。封装二叉搜索树代码function BinarySearchTree(){ // 新结点创建的构造函数 func...原创 2019-08-18 16:27:24 · 259 阅读 · 0 评论 -
【JS数据结构与算法】二叉搜索树的常见方法
目录一、引入二叉树的结构封装二、插入insert(key)三、二叉树的遍历方式1、先序遍历2、中序遍历3、后序遍历四、二叉搜索树查找最值五、二叉搜索树查找某个Key六、二叉搜索树删除结点七、完整代码一、引入二叉树的结构封装function BinarySearchTree(){ // 新结点创建的构造函数 function...原创 2019-08-21 23:18:50 · 538 阅读 · 0 评论 -
【JS数据结构与算法】大O表示法
含义算法的时间复杂度通常用大O符号表述,定义为T[n] = O(f(n))。大O表示法,用于描述计算机算法的效率,在计算机中,这是一种粗略的度量。这个其实就是当数据项个数发生变化时,算法的效率会跟着发生变化。推导出大O表示法的方式① 用常量1取代运行时间中所有的加法常量。② 在修改后的运行次数函数中,只保留最高阶项。③ 如果最高存在且不为1,则去除这个项乘积的系数。...原创 2019-10-02 20:46:39 · 373 阅读 · 0 评论 -
【JS数据结构与算法】排序算法的封装
简单排序:冒泡排序、选择排序、插入排序高级排序:希尔排序、快速排序、堆排序、归并排序封装列表在开始编写排序算法之前,先封装一个列表存储数据,定义相应的属性,再在原型上封装不同的排序算法。...原创 2019-11-06 16:50:37 · 268 阅读 · 0 评论