
数据结构和算法
文章平均质量分 61
以c为基础的数据结构和算法
阿^觅
这个作者很懒,什么都没留下…
展开
-
栈和队列以及优先级队列
他的底层结构为堆,因此与堆的实现非常相似,无非就是加上了一层封装。栈的实现非常简单,因为所有函数都可以去调用,适配器默认为。在堆中最重要的两个结构无非就是。与栈的实现类似,只不过是。原创 2024-07-01 18:45:39 · 204 阅读 · 0 评论 -
非比较排序
对于衔接比较紧密的数中(即每个数的间隔不会很大)的时候,这类非比较的效率也是非常的高。根据统计的结果将序列回收到原来的序列中。计数数组的下标即为原数组中的元素。统计相同元素出现次数。先统计出现次数(如下)思想:计数排序又称为。找出最大值和最小值(原创 2024-01-17 11:55:32 · 373 阅读 · 1 评论 -
归并排序算法
Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。与二叉树的思想类似,将主问题一步一步化小,直到begin <= end时,两数排好序,接着两组有序的数据。然后两组4个数据的有序数组进行合并再次memcpy,依次向上return。的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。)是建立在归并操作上的一种有效的排序算法。相较于快排,归排的稳定性非常好。原创 2023-12-12 14:37:13 · 526 阅读 · 0 评论 -
快速排序(2)
那为什么默认相遇位置比a[keyi]小呢?原创 2023-12-12 09:46:55 · 439 阅读 · 0 评论 -
交换排序(冒泡排序)(快速排序(1))
基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。原创 2023-12-08 22:40:02 · 499 阅读 · 0 评论 -
选择排序和堆排序
1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:不稳定注意:以下讲解全是建立在升序基础上。直接选择排序的。原创 2023-12-07 21:56:26 · 444 阅读 · 1 评论 -
插入排序和希尔排序
gap(间隔)的取值没有固定说法,但gap = n/3+1是较为合理的,因为这样既保证了最后可以取到gap == 1的时候(即最后一次排序可以完成完全排序),又可以保证分出的间隔不会过于繁琐。end应从0下标开始,(因为若end从1开始,不确定前两个数据是否有序),插入排序中end开始的位置必须保证end之前必须有序。希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定。时,数组已经接近有序的了,这样就会很快。,它是一种稳定的排序算法。原创 2023-12-05 14:32:23 · 945 阅读 · 0 评论 -
判断二叉树是否为完全二叉树
则返回false(不是完全二叉树),否则(即前面条件不满足)返回true(是完全二叉树)。将二叉树层序遍历(节点)插进队列中,遇到空时就break(退出循环),再重新遍历一遍,队列的源码位于上篇文章中,可自行参考。原创 2023-12-03 21:25:37 · 579 阅读 · 0 评论 -
二叉树的层序遍历
若要体现出层序性(也就是适合的位置换行),可以以每层的个数作为循环条件来打印。接着,以列队是否为空为条件用while循环将二叉树一层一层遍历打印。首先,单独处理root,如果root非空,先入列。这样就能打印出层次感(也就是一棵树的感觉)。就可以便捷的实现,这是运用了队列的。的特性,使得二叉树一层一层遍历。原创 2023-12-03 21:19:50 · 814 阅读 · 0 评论 -
基本数据结构二叉树(3)
由于博主对二叉树的结果掌握还不够深入,因此在讲解相关操作前将手动创建一颗简单的二叉树,快速进入正题,等博主二叉树结构了解的差不多时,我将会进行内容补充。是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。的,因此后序基本操作中基本都是按照该概念实现的。访问根结点的操作发生在遍历其左右子树之中(间)。再看二叉树基本操作前,再回顾下二叉树的概念,访问根结点的操作发生在遍历其左右子树之前。访问根结点的操作发生在遍历其左右子树之后。学习二叉树结构,最简单的方式就是遍历。由于被访问的结点必是某子树的根,原创 2023-11-28 20:18:09 · 1072 阅读 · 0 评论 -
详细堆排序的实现
首先,排序之前要先建立一个堆来实现排序由于,所以:实现要创建大堆实现要创建小堆。原创 2023-11-27 22:17:30 · 586 阅读 · 1 评论 -
基本数据结构二叉树(2)
下面我们给出一个数组,这个数组逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们通过算法,把它构建成一个堆。这里我们从倒数的第一个非叶子节点的子树开始调整,一直调整到根节点的树,就可以调整成堆。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆。删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了。),一个一个读取文本里面的数,只要数大于栈顶,就push进去,然后。原创 2023-11-27 21:17:14 · 878 阅读 · 0 评论 -
基本数据结构二叉树(1)
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。:以某节点为根的子树中任一节点都称为该节点的子孙。:若一个节点含有子节点,则这个节点称为其子节点的父节点;个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从。:一个节点含有的子树的根节点称为该节点的子节点;:一个节点含有的子树的个数称为该节点的度;:具有相同父节点的节点互称为兄弟节点;原创 2023-11-26 23:04:36 · 1527 阅读 · 0 评论 -
数据结构中常用的的栈和队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。环形队列可以使用数组实现,也可以使用循环链表实现。,相对而言数组的结构实现更优一些。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。出栈:栈的删除操作叫做出栈。压栈:栈的插入操作叫做进栈。原创 2023-11-13 17:52:59 · 57 阅读 · 0 评论 -
C时间复杂度or空间复杂度(2)
空间复杂度和常见复杂度对比原创 2023-10-30 22:28:55 · 45 阅读 · 0 评论 -
C时间复杂度or空间复杂度(1)
算法效率和时间复杂度原创 2023-10-30 22:24:21 · 53 阅读 · 0 评论