
数据结构与算法
文章平均质量分 89
凉夏y
这个作者很懒,什么都没留下…
展开
-
红黑树与map、set的封装
简单了解红黑树上一篇博客我们了解了AVL树的插入实现,其插入搜索时间复杂度是O(logN)级别的。而红黑树也是一颗平衡搜索二叉树,但是与AVL树不同的地方在于,红黑树的平衡策略是近似平衡,而非AVL树的完全平衡。可能有小伙伴就会问了,不是越平衡效率越高吗?为什么更多地方采用的是红黑树而非AVL树呢?这里就要从红黑树近似平衡的特点说起了,由于平衡限制的并不那么严格,所以红黑树通过旋转调整平衡的次数相比AVL树就更少了,也就是说红黑树的插入会比AVL更快。而红黑树通过一系列规则,将根节点到叶子结点的最长原创 2022-06-03 19:28:27 · 323 阅读 · 2 评论 -
AVL树的插入
为什么需要AVL树?我们知道搜索二叉树通过对每一个结点限制规定:左子树都比比根节点小,右子树比根节点大,来达到O(logN)的搜索效率的:但是一般的搜索二叉树还有一个很严重的问题:当左右子树高度差很大时,会导致搜索效率极度退化,甚至在顺序插入时退化至O(N):很明显,普通的搜索二叉树在一些情况下并不能达到预期的O(logN)搜索效率,而其原因就是高度的极度不平衡。而AVL树就通过旋转的方式来维持搜索二叉树的平衡,AVL树得名于它的发明者G. M. Adelson-Vels原创 2022-05-29 12:58:45 · 2608 阅读 · 1 评论 -
快速排序详解
1.什么是快速排序我们知道排序有很多种,常见的如希尔排序,插入排序,选择排序,堆排序等等,而快速排序也是排序家族中的一员。因为其在大多数情况下有着优秀的综合性能,快速排序的快速也算是实至名归,接下来就为大家讲解快速排序的思想与实现。2.快速排序的核心思想快速排序通过多次比较与交换来完成排序。而这个过程又被分为了多次重复单趟排序,接下来我们先从每一趟的排序讲起。快速排序的单趟排序思想是:在一个无序数组中取一个数key,每一趟排序的最终目的是:让key的左边的所有数小于key,key的右边都原创 2021-11-19 16:57:43 · 112953 阅读 · 20 评论 -
OJ题:设计一个循环队列
(本题取自LeetCode622.设计循环队列)1.题目介绍循环队列是指一种线性的数据结构,该结构遵循先进先出的原则,并且队尾则被连接在队首之后以形成一个循环。循环队列可以循环使用队列之前用过的空间,普通队列的头元素前的节点不能再使用,而循环队列可以在队列没有满之前循环的使用空间。对于循环队列我们需要支持如下的操作:1.构造一个队列长度为k的循环队列2.从队首获取元素,若队列为空则返回-13.获取队尾元素,若队列为空则返回-14.向循环队列插入一个元素,若成功插入则返回.原创 2021-11-01 21:54:08 · 554 阅读 · 2 评论 -
双向带头循环链表的介绍与实现
双向带头循环链表是结构上最为复杂的一种链表,但是正是因为其结构复杂,也给这种链表带来了其他链表所没有的优势。今天我们就介绍一下双向带头循环链表并且完成其构建。1.双向 带头 循环都是什么意思?2.双向带头循环链表的结构...原创 2021-10-29 21:34:26 · 433 阅读 · 3 评论 -
堆与堆排序
堆排序是指利用堆这种数据结构对数据进行排序的算法。要了解堆排序,我们要先对堆进行一定的了解。堆堆是一种特殊的完全二叉树。在完全二叉树的基础上,堆还有以下特点:堆的每个父节点都大于等于其所有子节点 这类堆被称为大堆或者堆的每个父节点都小于等于其所有子节点 这类堆被称为小堆比如下面的二叉树就是一个小堆堆的向下调整算法了解了堆的基本概念后,我们来了解如何将一个完全二叉树转变为堆。首先,我们可以利用向下调整算法将一个左右子树都为堆(要得到小堆则两个子树都要是小堆,要得到大堆.原创 2021-10-23 14:34:38 · 258 阅读 · 0 评论 -
从树到二叉树入门
1.堆是什么?堆是一种特殊的完全二叉树。堆的特点是,它满足:它的每一个父节点都父节点的值大于它的两个子节点的值 或者 它的每一个父节点都父节点的值小于它的两个子节点的值。若它的根为最大值则称之为大根堆,若它的根为堆节点里的最小值则称之为小根堆。...原创 2021-10-16 13:21:34 · 396 阅读 · 1 评论