
数据结构从入门到入土
文章平均质量分 85
数据结构的学习之路
无聊看看天T^T
事以密成,语以泄败
展开
-
C++的红黑树
每一次的调整都可能导致另一次红黑树性质的被破坏cur和parent均为红色是由“新增”或“向上调整”两种原因导致的,因此无论是这两种的哪一种,只有当cur和parent均不为红时才不需要继续调整(循环)红黑树是否调整取决于cur和parent是否均为红,怎么调整取决于叔叔u的情况 + cur是p的哪个孩子原创 2024-05-23 21:41:17 · 1002 阅读 · 0 评论 -
C++的AVL树
因为插入时该结点的bf肯定为0,但是该结点的插入可能会使它的祖先结点的bf产生变化,当某个祖先结点的bf变为2时就需要以该祖先结点为基础进行旋转,通过上述案例我们可以得知不论是RR左旋还是LL右旋,完成插入后和完成旋转后两个状态时,新插入结点的bf第一为0,所以在完成旋转后不需要对该值进行更新从宏观上来看它一直没变。插入新结点必然会导致其父结点的bf产生变化,并可能会导致它的爷爷结点甚至更向上的某个祖先结点的bf发生变化,当某个祖先结点的bf == 2或-2时需要以该祖先结点为基础进行旋转。原创 2024-05-21 09:21:53 · 1047 阅读 · 0 评论 -
C++的二叉搜索树
(英汉词典中的中英文之间的对应关系,通过中文可以快速找到对应的中文,统计单词的出现次数,统计成功后,给定某一个单词就能快速找到其出现的次数)(以词库中所有单词集合中的每个单词作为key,构建一棵二叉搜索树在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误)每一个关键码key都有与之对应的值value,即键值对。只有key作为关键码,结构中只需存储key即可,key就是要搜索的值。多叉搜索树查找:B树系列。原创 2024-04-25 20:24:13 · 333 阅读 · 0 评论 -
快速排序的hoare法
hoare版本的快速排序超详细分步实现,时空复杂度的讲解,以及基于三数取中法快速排序的优化实现原创 2023-12-17 21:45:46 · 1149 阅读 · 0 评论 -
选择排序(多方式)
简单选择排序的两种实现方式、堆排序的实现以及相关应用、时间复杂度计算......原创 2023-12-14 20:12:57 · 824 阅读 · 0 评论 -
数据结构复习思维导图(一)
~over~原创 2023-12-27 23:00:17 · 399 阅读 · 0 评论 -
OJ练习册
OJ练习:单值二叉树、相同的树、对称二叉树、二叉树的前序遍历......原创 2023-12-10 21:12:41 · 931 阅读 · 0 评论 -
递归实现归并排序与测试各类排序的性能
递归方式的归并排序及相关时空复杂度的分析,十分详细的画图演示~原创 2023-12-19 22:27:28 · 974 阅读 · 0 评论 -
C语言实现堆排序
实现了降序堆排序与升序堆排序,更直观帮你了解堆排序的排序过程并选出最适合的排序方法原创 2023-12-03 23:15:51 · 1173 阅读 · 0 评论 -
排序的基本概念
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次。:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。:数据元素全部放在内存中的排序。序保持不变,即在原序列中,之前,而在排序后的序列中,原创 2023-12-11 23:31:27 · 342 阅读 · 0 评论 -
数据结构复习思维导图(四)
~over~原创 2023-12-30 19:06:34 · 393 阅读 · 0 评论 -
动态顺序表的增删改查 && 附加功能
本篇内容主要写了动态顺序表的增删改查操作、拥有附加功能的基于动态顺序表实现的通讯录以及顺序表的经典OJ题目......原创 2023-10-14 21:31:46 · 431 阅读 · 0 评论 -
二叉树的结点个数、叶子结点个数的代码实现<分治算法>
分治算法是一种将问题划分为更小的子问题,并通过解决子问题来解决原始问题的算法设计策略,由于子问题与原问题在结构和解法上的相似性,用分治方法解决的问题,大都采用了递归的形式原创 2023-12-09 22:21:43 · 1327 阅读 · 0 评论 -
top K问题
在大小堆的实现(C语言)中我们讨论了堆的实际意义,在看了就会的堆排序(C语言)文件操作函数---C语言版本time、rand和srand函数及应用(C语言)原创 2023-12-06 22:00:13 · 1856 阅读 · 0 评论 -
数据结构复习思维导图(三)
~over~原创 2023-12-28 23:32:21 · 317 阅读 · 0 评论 -
设计循环队列
使用数组的循环特性以及取模运算实现循环链表......原创 2023-11-21 21:51:26 · 250 阅读 · 0 评论 -
栈的简单实现
关于数据结构的栈......原创 2023-11-18 20:34:07 · 230 阅读 · 0 评论 -
双向链表的操作
相比于单链表中的不带头单向不循环链表,双向链表中的带头双向循环链表会更好理解一点,虽然仍有一些小细节需要注意,但是在整体思路上有明显的难度降低......原创 2023-10-22 11:57:28 · 160 阅读 · 0 评论 -
树与非树 && 树的存储表示方式
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是。:若一个节点含有子节点,则这个节点称为其子节点的父节点;:一个节点含有的子树的根节点称为该节点的子节点;:一棵树中,最大的节点的度称为树的度;:一个节点含有的子树的个数称为该节点的度;:具有相同父节点的节点互称为兄弟节点;:从根到该节点所经分支上的所有节点;:树中节点的最大层次;:双亲在同一层的节点互为堂兄弟;)棵互不相交的树的集合称为森林;原创 2023-11-21 23:02:51 · 500 阅读 · 0 评论 -
堆的时间复杂度计算
解决堆排序的升降序以及基于堆的top K问题中出现的时间复杂度计算原创 2023-12-07 16:00:39 · 1082 阅读 · 0 评论 -
非递归实现归并排序
非递归实现归并排序的特点主要有:迭代方式:非递归版本的归并排序使用迭代的方式进行排序,而不是递归调用。它通过循环和迭代来实现算法的执行流程,而不需要函数调用栈。自底向上:非递归版本采用自底向上(bottom-up)的方法进行排序。它先将原始数组切分成长度为 1 的子序列,然后依次合并相邻子序列直到整个数组有序。辅助空间:在每一轮合并操作中,需要额外使用一个临时数组作为辅助空间来存储已经排好序的部分。这个临时数组大小通常与原始数组相同。形成有序子序列:在每一轮合并操作中,将两个相邻的子序列按顺序原创 2024-01-16 23:07:55 · 958 阅读 · 0 评论 -
二叉树查找值为x的结点 && 树的高度 && 第k层结点个数
关于查找二叉树中值为x的结点的代码实现,附带二叉树结点个数、叶子节点个数、树高度、树第k层结点的实现代码......原创 2023-12-09 22:58:40 · 1118 阅读 · 0 评论 -
单链表的实现
关于使用到的二级指针传参以及对它的解引用、判空等操作的理解是除了理解单链表本身结构外个人感觉比较难的一点,在每次完成操作函数时需要注意对指向链表特殊位置的头部和尾部以及常规位置的三种不同情况的判断,使代码更加严谨原创 2023-10-18 18:55:05 · 388 阅读 · 0 评论 -
直接插入排序与希尔排序
将希尔排序与直接插入排序进行了“分步”讲解与实现......原创 2023-12-13 23:31:53 · 2173 阅读 · 0 评论 -
快速排序的挖坑法与双指针法
挖坑法和伪双指针法实现快速排序,以及相关时空复杂度的分析......原创 2023-12-18 21:26:10 · 2464 阅读 · 0 评论 -
时间复杂度的计算
常见的时间复杂度求解办法:递归树、主定理、单层循环求解、多层循环求解......原创 2023-10-30 17:02:37 · 1685 阅读 · 0 评论 -
二叉树基本操作
由于是先让当前结点的左孩子入队,然后再让当前结点的右孩子入队,当结点2作为队头的时候,它的左孩子和右孩子肯定会比结点4的左孩子和右孩子入队,当结点2出队,结点4变为队头时,结点4的左右孩子才会入队,这样刚好就可以满足我们层序遍历的需求了。借助队列先进先出的特点,先将根结点入队,然后获取此时的队头结点并将队头结点出队最后打印队头结点打印,将当前节点的左右非空的孩子入队。因为我们要在队列中存放的是二叉树的结点而非结点中的值,所以原来队列实现中的。在进行二叉树的层序遍历过程中我们要使用队列的性质。原创 2023-12-11 23:29:20 · 1172 阅读 · 0 评论 -
数据结构复习思维导图(二)
~over~原创 2023-12-27 23:04:56 · 447 阅读 · 0 评论 -
二叉树知识总结
18、 三数取中法能过保证快排的平均时间复杂度为nlogn,并不是在所有情况下都是最快的,比如完全有序的序列,冒泡排序可以做到O(n)(使用了标志位flag的冒泡排序)17、快排的非递归是在模拟递归的过程,所以时间复杂度并没有本质的变化,但是没有递归,可以减少栈空间的开销。12、在一颗度为3的树中,度为3的结点有2个,度为2的结点有1个,度为1的结点有2个,则叶子结点有。8、设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为。10、二叉树指最大孩子个数为2,即树的度为二的树。原创 2024-01-15 19:28:31 · 1148 阅读 · 0 评论 -
队列的实现
队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低......原创 2023-11-20 23:21:42 · 166 阅读 · 0 评论 -
大小堆的实现
小堆的实现,以及对堆的实际意义的探讨......原创 2023-12-03 15:43:45 · 1156 阅读 · 0 评论 -
二叉树的基本概念
本篇介绍了:二叉树的基本性质以及与计算结点相关的性质、特殊二叉树中的满二叉树与完全二叉树的时间复杂度的计算及相关性质......原创 2023-11-30 23:57:45 · 1468 阅读 · 0 评论 -
非递归实现的快速排序
借助栈的知识实现非递归的快速排序,当然它的时空复杂度与之前的递归的快速排序基本是一样的......原创 2023-12-19 21:23:52 · 732 阅读 · 0 评论 -
二叉树的前、中、后序遍历
超简单的二叉树的前、中、后序遍历方式的实现...原创 2023-12-07 23:43:00 · 990 阅读 · 0 评论 -
基数(桶)排序
基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。原创 2024-01-21 00:44:09 · 383 阅读 · 0 评论