数据结构
文章平均质量分 88
数据结构学习
fresh hacker
所有命运的馈赠,早已在暗中标注好了价格。
展开
-
【排序算法】快速排序(详解+各版本实现)
快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序②时间复杂度:O(N*logN)关于时间复杂度,可以这样简单解释:若递归调用的展开是二分的,就很类似于二叉树的结构,那么就存在logN层,每层遍历的时间复杂度为O(N),因此总的时间复杂度可以看为O(N*logN),当然这只是一种简单的解释,方便记忆。原创 2024-07-09 11:51:51 · 1418 阅读 · 0 评论 -
【数据结构】二叉树的实现
那么以上图为例进行前序遍历,首先访问根(1),然后访问左子树(2开始往下),2也是根节点,访问根(2),然后访问左子树(3往下),3也是根节点,访问根(3),然后访问左子树(N),为NULL返回,再访问右子树(N),为NULL返回,此时3的根左右子树都已经访问完,继续往上返回,访问2的右子树(N),为NULL返回,继而继续访问1的右子树(4往下),同理,最终得到访问顺序为:123NNN45NN6NN。如下图所示,可以看见,在出NULL时,队列已经为空,那么这就可以作为是否是完全二叉树的一个判断标准。原创 2024-07-05 10:00:00 · 900 阅读 · 0 评论 -
【数据结构】栈和队列
栈,作为一种特殊的线性表,对栈(Stack)的结构体的定义完全可以参考线性表的构成。链表和数组实现都可以,这里就使用了动态顺序表的构造方法。【C语言】顺序表(原理+实现)-CSDN博客//定义存储数据的类型//定义栈int top;}ST;队列即可以用数组实现也可以用链表实现。但使用链表的结构更优秀一些,原因在于如果使用数组,那么在对队头的处理就比较麻烦,删除下标为0的元素后,还需要整体前移,效率比较低。//定义数据类型//定义链表的节点}QNode;//定义队列。原创 2024-05-14 10:00:00 · 842 阅读 · 0 评论 -
【排序算法】归并排序
依据二分往下递归,类似于二叉树,总共有LogN层,每层总的归并合计起来可以看作O(N),因此总的时间复杂度可以看作是:O(N*logN)原创 2024-07-10 17:25:13 · 426 阅读 · 0 评论 -
【数据结构】二叉树-堆
本文全面介绍了堆这一数据结构的基本概念、性质和实现方法。首先,文章对树的概念和性质进行了概述,为理解堆的结构打下基础。接着,详细阐述了二叉树的概念及其实现,为后续深入堆的讨论提供了必要的背景知识。文章的第三部分深入探讨了堆的概念和结构,区分了最大堆和最小堆,并解释了它们各自的性质。第四部分详细描述了堆的实现过程,包括向下调整算法、堆的创建、向上调整算法以及堆的删除操作,为读者提供了堆操作的具体步骤和逻辑。第五部分介绍了堆排序算法,这是一种利用堆结构进行数据排序的有效方法。最后,文章提供了堆的源码示例原创 2024-06-04 10:00:00 · 1837 阅读 · 0 评论 -
【排序算法】计数排序
存在负数的情况,max-min+1仍然得到的是正的范围。如9-(-5)+1 = 15,此时仍然保持相对映射,min = -5时,-5对应的下标为-5-(-5)= 0,即min对应的始终是下标为0的位置,其余相对同理,因此计数排序是可以排负数的。原创 2024-07-11 15:49:14 · 515 阅读 · 0 评论 -
【数据结构】栈和队列-相互实现OJ题
本题目是关于栈和队列的OJ题目,需对栈和队列有一定了解再进行做题,若不了解可以根据我之前这篇文章进行学习:【数据结构】栈和队列-CSDN博客,题中需要的栈和队列的实现也在该文章中有源代码原创 2024-07-01 19:11:59 · 752 阅读 · 0 评论 -
【数据结构】带环链表(详解+拓展)
带环链表尾节点的next指针指向其他节点,因此遍历一个带环链表将是一个死循环,这是带环链表的基本特征,如示例所示。原创 2024-04-30 10:00:00 · 548 阅读 · 1 评论 -
【数据结构】建堆的时间复杂度
层数一定时,在二叉树节点个数最大的情况下,二叉树为满二叉树,如下图所示,可以清晰地看到在满二叉树中第h层有2^(h-1)个节点,总节点N就等于一个等比数列的求和,运用等比数列求和公式可以得到:N = 2^h - 1当然还得考虑节点最少的情况,此时第h-1层仍是满节点的,第h层只有一个节点,此时,可以使用上述公式得到h-1层满二叉树总节点为2^(h-1) - 1个,再加上第h层的1个节点,总节点N = 2^(h-1)个。原创 2024-07-04 10:00:00 · 847 阅读 · 0 评论 -
【排序算法】插入排序(希尔排序)
直接插入排序是一种简单的插入排序法,其核心思想是对一个已经有序的序列插入一个数据,该数据依次比较有序序列中的值,直到插入到合适的位置。在我们玩扑克牌整理牌序的时候,用到的就是直接插入排序的思想。原创 2024-07-07 10:00:00 · 720 阅读 · 0 评论