数据结构与算法
文章平均质量分 96
itpeilibo
不怕孤独,努力沉淀;
于淡泊中,平和自在。
展开
-
【数据结构与算法】JavaScript实现排序算法
假如有数组有10个数据,第1个数据为黑色,增量为5。那么第二个为黑色的数据index=5,第3个数据为黑色的数据index = 10(不存在)。所以黑色的数据每组只有2个,10 / 2 = 5一共可分5组,即。可以看到效率从大到小分别是:O(1)> O(logn)> O(n)> O(nlog(n))> O(n²)> O(2n),先选出一个数据(比如65),将比其小的数据都放在它的左边,将比它大的数据都放在它的右边。以下代码实现中采用希尔排序原稿中建议的增量即。图中d表示增量gap。快速排序的核心思想是。原创 2023-12-12 09:59:42 · 1039 阅读 · 4 评论 -
【数据结构与算法】JavaScript实现图结构
什么是图?图结构是一种与树结构有些相似的数据结构;图论是数学的一个分支,并且,在数学中,树是图的一种;图论以图为研究对象,研究顶点和边组成的图形的数学理论和方法;事物之间的联系顶点代表事物边代表两个事物间的关系;图的特点:一组顶点:通常用V(Vertex)表示顶点的集合;一组边:通常用E(Edge)表示边的集合;边是顶点和顶点之间的连线;边可以是有向的,也可以是无向的。比如A----B表示无向,A —> B 表示有向;图的常用术语:顶点:表示图中的一个节点;边:表示。原创 2023-12-12 09:29:18 · 985 阅读 · 4 评论 -
【数据结构与算法】实现红黑树
此时既满足规则4也满足规则5。尽管新节点是红色的,但是新节点N有两个黑色节点NIL,所以通向它的路径上黑色节点的个数依然相等,因此满足规则5。旋转二叉搜索树,使得父节点原来的位置被自己的右子节点替代,左子节点的位置被父节点替代;旋转二叉搜索树,使得父节点原来的位置被自己的左子节点替代,右子节点的位置被父节点替代;在二叉树中依次插入节点:10,9,8,7,6,5,4,3,2,1。节点P是红色节点,节点U是黑色节点,并且节点N为节点P的。节点P是红色节点,节点U是黑色节点,并且节点N为节点P的。原创 2023-12-11 09:39:06 · 838 阅读 · 2 评论 -
【数据结构与算法】JavaScript实现二叉搜索树
什么是二叉搜索树? 二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树二叉搜索树是一颗二叉树, 可以为空;如果不为空,满足以下性质:非空左子树的所有键值小于其根结点的键值。非空右子树的所有键值大于其根结点的键值。左、右子树本身也都是二叉搜索树。二叉搜索树的特点:二叉搜索树的特点就是相对较小的值总是保存在左结点上, 相对较大的值总是保存在右结点上,那么利用这个特点, 我们可以做什么事情呢?查找效率非常高, 这也是二叉搜索树中, 搜索的来源.二叉树搜索树的基本属性:原创 2023-12-04 09:41:16 · 1058 阅读 · 3 评论 -
【数据结构与算法】JavaScript实现树结构
什么是树?树一般都有一个根,连接着根的是树干;树干会发生分叉,形成许多树枝,树枝会继续分化成更小的树枝;树枝的最后是叶子;现实生活中很多结构都是树的抽象,模拟的树结构相当于旋转180°的树。树结构对比于数组/链表/哈希表有哪些优势呢:优点:可以通过下标值访问,效率高;缺点:查找数据时需要先对数据进行排序,生成有序数组,才能提高查找效率;并且在插入和删除元素时,需要大量的位移操作;优点:数据的插入和删除操作效率都很高;查找效率低,需要从头开始依次查找,直到找到目标数据为止;原创 2023-11-27 09:00:00 · 1338 阅读 · 4 评论 -
【数据结构与算法】JavaScript实现双向链表
双向链表:既可以从头遍历到尾,又可以从尾遍历到头。也就是说链表连接的过程是双向的,它的实现原理是:一个节点既有向前连接的引用,也有一个向后连接的引用。每次在插入或删除某个节点时,都需要处理四个引用,而不是两个,实现起来会困难些;相对于单向链表,所占内存空间更大一些;但是,相对于双向链表的便利性而言,这些缺点微不足道。双向链表不仅有head指针指向第一个节点,而且有tail指针指向最后一个节点;item储存数据、prev指向前一个节点、next指向后一个节点;原创 2023-11-20 09:00:00 · 238 阅读 · 2 评论 -
【数据结构与算法】JavaScript实现单向链表
链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同。链表的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(有的语言称为指针或连接)组成。类似于火车头,一节车厢载着乘客(数据),通过节点连接另一节车厢。head属性指向链表的第一个节点;链表中的最后一个节点指向null;当链表中一个节点也没有的时候,head直接指向null;数组的创建通常需要申请一段连续的内存空间(一整块内存),并且大小是固定的。所以当原数组不能满足容量需求时,需要扩容。原创 2023-11-13 09:00:00 · 347 阅读 · 2 评论 -
【数据结构与算法】JavaScript实现哈希表
哈希表通常是基于数组哈希表可以提供非常快速的插入-删除-查找操作;无论多少数据,插入和删除值都只需要非常短的时间,即O(1)的时间级。实际上,只需要几个机器指令即可完成;哈希表的速度比树还要快,基本可以瞬间查找到想要的元素。但是相对于树来说编码要简单得多。哈希表同样存在不足之处哈希表中的数据是没有顺序的,所以不能以一种固定的方式(比如从小到大 )来遍历其中的元素。通常情况下,哈希表中的key是不允许重复的,不能放置相同的key,用于保存不同的元素。哈希表是什么?原创 2023-11-06 09:00:00 · 1020 阅读 · 2 评论 -
【数据结构与算法】JavaScript实现集合与字典
集合比较常见的实现方式是哈希表,这里使用JavaScript的Object类进行封装。集合通常是由一组无序的不能重复的元素构成。数学中常指的集合中的元素是可以重复的,但是计算机中集合的元素不能重复。特殊之处在于里面的元素没有顺序也不能重复。没有顺序意味着不能通过下标值进行访问,不能重复意味着相同的对象在集合中只会存在一份。实现集合类在ES6中的Set类就是一个集合类,这里我们重新封装一个Set类,了解集合的底层实现。JavaScript中的Object类中的key。原创 2023-10-30 09:00:00 · 378 阅读 · 2 评论 -
【数据结构与算法】JavaScript实现队列结构(Queue)
队列是是一种受限的线性表,特点为先进先出FIFO受限之处在于它只允许在表的前端(front)进行删除操作;在表的后端(rear)进行插入操作;相当于排队买票,先来的先买票,后来的后买票。打印队列:计算机打印多个文件的时候,需要排队打印;线程队列:当开启多线程时,当新开启的线程所需的资源不足时就先放入线程队列,等待CPU处理;基于数组实现;基于链表实现;enqueue(element):向队列尾部添加一个(或多个)新的项;原创 2023-10-23 09:26:54 · 901 阅读 · 2 评论 -
【数据结构与算法】JavaScript实现栈结构(Stack)
数据结构就是在计算机中,存储和组织数据的方式。例如:图书管理,怎样摆放图书才能既能放很多书,也方便取?操作一:新书怎么插入?操作二:怎么找到某本指定的书?常见的数据结构:数组(Aarray)栈(Stack)链表图(Graph)散列表(Hash)队列(Queue)树(Tree)堆(Heap)注意:数据结构与算法与语言无关,常见的编程语言都有直接或间接的使用上述常见的数据结构。算法(Algorithm)的定义一个有限指令集,每条指令的描述不依赖于语言;原创 2023-10-18 11:05:47 · 242 阅读 · 4 评论