![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 64
weixin_41387874
这个作者很懒,什么都没留下…
展开
-
堆的JavaScript实现和时间复杂度
完全二叉树和满二叉树具体概念可以看数和二叉树堆的简介堆也叫二叉堆,实际上是一个二叉树。堆是一个完全二叉树。堆不是最大堆就是最小堆,最小堆是任一结点是它子树中所有结点的最小值,最大堆是任一结点是它子树中所有结点的最大值。最小堆允许快速导出最小值,最大堆允许快速导出最大值。(堆排序的实现原理)最小堆的JavaScript实现(利用数组)实现代码中把每一个堆实例都会有的方法放到原型对象的好处是不会打乱全局作用域,也不会对每一个实例都实例化一个Function对象的实例。原型对象中的方法将原创 2021-08-09 12:42:01 · 136 阅读 · 1 评论 -
JavaScript实现5种排序算法及其稳定性(分治类算法时间复杂度分析)
快速排序简介快速排序擅长于处理大数据集,当数据集较大时,我们一般使用快速排序。快速排序也十分脆弱,经常会出现实际时间复杂度只有O(n^2)的情况。快速排序的平均时间复杂度是O(n*logn)(n是数据集种数据个数)。快速排序实际上是一种分治的排序算法,利用递归实现。快速排序的过程1.选择一个基准元素pivot2.把数组中小于pivot的数据放到pivot左侧,大于pivot的数据放到pivot右侧。3.递归的进行这个过程,直到数组为空。首先我们给出问题,我们想要对以下数据进行排序原创 2021-08-06 20:51:25 · 655 阅读 · 1 评论 -
JavaScript实现优先队列
优先队列队列是一种遵循先进先出性质的由有限个数据元素构成的线性表。优先队列是一种特殊的队列,它不遵循简单的先进先出规则,而是由优先级决定出队顺序,优先级更高的更早出队。这就类似于去医院看病,病情更紧急的患者具有更高的优先级,先接受诊治。function Item(value,priority) //优先队列中数据元素的结构{ this.value = value; this.priority = priority;}function priorityQueue(){原创 2021-07-13 17:17:17 · 213 阅读 · 2 评论 -
JS实现二叉搜索树以及三种遍历
JS实现二叉搜索树function BST(){ this.root = null; this.insert = function(val) //用于向二叉搜索树中插入结点 { let a = new Node(val,null,null); //生成待插入结点,这时它的键是val,左子结点指针指向null,右子结点指针指向null。 if(this.root === null) //当二叉搜索树的根结点为空时,则待插入结点成为根结点。原创 2021-05-14 15:46:26 · 160 阅读 · 0 评论 -
二叉搜索树
写在之前如何确定应该使用什么数据结构?数据结构主要分为数据的逻辑结构和物理结构,我们通常利用数据的逻辑关系来选择是用什么数据结构,如:具有一对多关系的数据,我们就会采用树结构,数据的逻辑结构主要分为下面三种:逻辑结构采用什么数据结构一对一线性表,如:数组、链表、队列、栈一对多树结构多对一 或 多对多图二叉搜索树二叉搜索树(binary search tree, BST),也叫二叉排序树和二叉查找树。对于一个二叉树:如果它的左子树不为空原创 2021-05-09 17:12:37 · 60 阅读 · 0 评论 -
树和二叉树
写在之前树数据结构和数组、链表、栈、队列等数据结构有什么区别?我们知道数据结构有物理结构和逻辑结构,而大部分数据结构都可以使用数组或链表实现,说明物理结构上并没有差异。树和其他数据结构的差异在于逻辑结构,数组、链表、栈、队列的逻辑结构是一对一的,而树的逻辑结构是一对多==(是一对多而不是多对一,树的定义中对于子树的说明限制了只能是一对多,一个结点可以有多个子结点)==。树树的示意图A是根结点A是B、C、D的父结点,B、C、D是兄弟结点E、F、G、H、I是叶子结点子树子树是树数原创 2021-05-09 12:15:46 · 98 阅读 · 0 评论 -
JavaScript实现链表、双向链表、循环链表
链表JS代码实现function Node(element) //生成新结点的构造函数{ this.val = element; //数据域 this.next = null; //指向下一个结点}function Linkedlist() //链表的构造函数{ this.head = new Node("head"); //每一个链表都存在头结点 this.find = function(target) //找到数据域为target的结点 {原创 2021-05-05 21:19:31 · 217 阅读 · 1 评论 -
常用数据结构(一)——链表和数组
写在之前什么是线性表?线性表是由n个数据类型相同的元素组成的有限序列。什么是数组?使用顺序存储方式实现的线性表。什么是链表?使用链式存储方式实现的线性表。数组数组特点数组的每个元素在内存位置上也相邻,因此内存需要分配一大块位置用来实现数组。可以在O(1)时间根据下标访问任何一个元素。数组的每个结点只储存数据元素。(和链表不同,如:单链表还要储存指向下一个元素的指针。)数组插入和删除操作的时间复杂度是O(n),因为需要移动大量元素。链表单链表单链表特点原创 2021-04-29 21:56:16 · 192 阅读 · 0 评论 -
哈希表、哈希函数、哈希冲突学习笔记
写在之前什么是函数?在中学中,函数被定义为,已知一个数集A,通过特定对应法则,由数集A得到了数集B。我们可以这样理解数集A中的每一个数,经过特定处理,得到了数集B。函数有三个组成部分,定义域A、值域B和对应法则。哈希表哈希表本质上是一个数组,数组的每个位置上储存着键值对(key : value),key是关键字,value是我们想要查找的值,把关键字输入哈希函数,可以得到储存着键值对的下标。哈希函数哈希函数也叫散列函数,哈希函数的定义域是所有key值,值域是下标。哈希函数可以原创 2021-04-28 17:39:40 · 126 阅读 · 0 评论