数据结构与算法
文章平均质量分 74
主要是用来记录下数据结构与算法的学习笔记。
吃饭爱喝水
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言实现栈和队列(源代码免费分享,同时解决相关算法题)
如果还想深入了解栈和队列请查询相关书籍和其他人博客。我这里是想记录下栈和队列实现的源代码和相关算法题的解题思路,希望对你有帮助。原创 2024-08-01 18:14:12 · 726 阅读 · 0 评论 -
【C++】总结下缺省参数,同时顺便补充一个计数算法
为函数的。原创 2023-10-24 08:03:52 · 153 阅读 · 0 评论 -
【C语言】借助队列来实现基数排序
基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。原创 2023-10-13 14:49:41 · 246 阅读 · 0 评论 -
【C语言-数据结构与算法】归并排序(不使用分治递归实现)
其的分治递归就是先把一组数据分成两组,然后分治递归不停拆分为两组,直到其为的时候,并同时将其数据归并一下。因为是从将不停缩小,缩小到为空或只剩一个数据时回溯归并。那么我们可不可以就从分组,并且。这样,等到分组达到最大时,也就刚好把整个数据都归并了一遍了。原创 2023-09-04 22:57:43 · 149 阅读 · 0 评论 -
【C语言-数据结构】归并排序(使用分治递归来实现)
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列区间有序。然后,利用分治递归法,紧接着将这分开的两组以同样的以中间值为界的方法来划分为两组,一直到最后只剩一个数或为空的时候停下来。停下来的这时,先将数据排序一下,也就是将这两组数据归并一下,然后将归并好的数据拷贝回原数据中去,最后回溯就ok了。到这里左半区间就变得有序了,同样的,右半区间也可以一样的实现。到这,也就完成了归并排序的讲解了。首先,先将一组数据分成两组,这里可以以中间值为界来划分。//分治递归,让子区间变得有序。原创 2023-09-02 21:10:18 · 727 阅读 · 0 评论 -
【C语言--数据结构】关于快速排序的一些补充及优化和将快速排序递归实现改为非递归实现
这时候,如果我们呢还想接着用快排来使其整体全部变为有序的话,如果还是选用最右边或最左边那个数据为KEY(假如刚好为最大值或最小值),这时使用快排可能会失效(栈溢出,递归调用太多次了,递归和为:N + N -1 + N -2 + ....1,所以这时的时间复杂度为O(N^2) )。其实我们在使用快排递归调用来使其形成左小右大(左大右小)的过程中,假如在其递归排序到了一个相对较小的区间处的时候,我们这时其实没有必要再对其进行递归调用排序了,直接用插入排序算法不是就可以节省下递归调用的时间了么?原创 2023-08-23 00:05:36 · 148 阅读 · 0 评论 -
【C语言】快速排序的不同实现方法
这个挖坑法和快速排序的总体实现上来看基本上差不太多。只是在使用了这个方法之后,对原生版本的快排中的。原创 2023-08-20 23:28:05 · 92 阅读 · 0 评论 -
【C语言】QuickSort---快速排序
如果将最左边的值作为基准值(KEY)后,让left先走,那么相遇时的值会比KEY大,这时,如果交换KEY的值和下标,则。,我们就实现了KEY这个基准值的左边都比它要小,它的右边都比其要大了,也就是左小右大了。了吧,然后KEY的左子序列是不是都是比它小,右子序列都是比它大的。),当我们将最左边的值作为基准值时,就得让right先走了。这样,在其完成之后,其实也就是递归完成后,它的整体就成为了。,并且同时将KEY的下标也一并与相遇的数据。时,先将其共同指向的值和KEY指向的。的数据的时候停下来。原创 2023-08-11 00:29:19 · 972 阅读 · 0 评论 -
【C语言】Select排序
选择排序,就是将从一组数据的最左边开始(最右也行),然后向右(左)遍历一遍,在找到最大(最小)的那个数据的时候,将其放在最初的位置(末尾),然后再回到其后一个(前一个)位置,再重新遍历,接着找出最大(最小).......把全部的数都遍历了之后,其数据也就有序了。原创 2023-08-09 21:33:00 · 319 阅读 · 0 评论 -
【C语言】Shell排序(希尔排序)---详细讲解,由浅入深。
一组数据分组然后使用插入排序。原创 2023-08-04 00:26:06 · 655 阅读 · 0 评论 -
【C语言】直接插入排序
排序,在我们生活中很常见,如:点外卖时,看到一份蛋炒饭的店排名;我们在班级中的成绩排名高低;全国各省GDP的排名......这些都是排序。原创 2023-08-02 00:15:27 · 209 阅读 · 1 评论 -
【C语言】判断一颗二叉树是否是完全二叉树
这就是完全二叉树的定义。一颗二叉树,它的每一层的节点都必须是全满的,不能有空。且同时,最后一层的节点也必须从左至右是连续存在的。那么,这颗树就是一颗完全二叉树。(满二叉树是特殊的完全二叉树)原创 2023-08-01 22:21:11 · 2139 阅读 · 2 评论 -
【C语言】二叉树的层序遍历
要对二叉树进行层序遍历,那么我们首先得先创建出来一个二叉树了。原创 2023-07-30 22:54:16 · 4170 阅读 · 1 评论 -
【C语言】二叉树的模拟销毁和创建
【代码】【C语言】二叉树的模拟销毁和创建。原创 2023-07-29 21:48:22 · 508 阅读 · 0 评论 -
【C语言】关于二叉树的算法题
总体思路:先判断根节点是否为空,如果不为空的话,那就将它的值用一个临时变量val来存储起来。同时,将其val作为基准值,利用前序遍历来遍历一遍整个二叉树,看是否有值与其不同。一旦有一个不同,则将全局变量的值改变一下。最后,再来判断一下全局变量的值是否改变了就行。总体思想:先判断是否为空树。判断完成之后,将其根节点指向的值用一个临时变量保存一下。再分别用两个临时指针变量来存储其左右节点的地址,并将其根节点的值分别于左右子树遍历判断是否相等一下。原创 2023-07-24 23:34:44 · 125 阅读 · 0 评论 -
【C语言】详解如何求一颗二叉树的深度及简单介绍下深度优先遍历及广度优先遍历
所以,其求深度的重点就是分别利用递归求出左右子树的层数也就是深度,然后相比较一下左右子树的层数哪一个较大,然后较大的那一个加1就求出来了深度了。原创 2023-07-24 15:34:03 · 1097 阅读 · 0 评论 -
【C语言】TOP-K问题(从N个数据中找出最大的k个数或者最小的k个数)
这里需要注意的是,这个第三种方法只适合于在有大量数据的时候用。可以节省大量的空间并且也会节省些时间。在数据量相对较小的时候,其实和第二种方法的时间复杂度差不多。原创 2023-07-16 21:14:39 · 840 阅读 · 1 评论 -
【C语言】利用递归来实现二叉树的前,中,后序遍历以及补充一些与二叉树相关的操作
1.前序遍历:(Preorder Traversal 亦称先序遍历)---访问根节点的操作发生在遍历其左右子树之前。2.(Inorder Traversal)----访问根节点的操作发生在遍历其左右子树之间。(Postorder Traversal)---访问根节点的操作发生在遍历其左右子树之后。由于被访问的节点必然是某子树的根,所以N(Node),L(Left subtree) 和 R(Right subtree)又可以解释为根,根的左子树和根的右子树。原创 2023-07-18 00:38:16 · 762 阅读 · 1 评论 -
利用向上调整或向下调整算法来直接将一个无序的数组转为一个大根堆或者小根堆
所以将 i 的初始值设置为 (n - 1 - 1) / 2. (也就是末尾节点的父节点)这里主要是因为AdjustDown方法的使用前提为其调整的左右子树必须都为堆才能进行。这里是将数组从下标为 0 的节点开始,到数组尾节点,每一个节点都进行一次向上提升。然后一直 将 i--操作,就将所有的非叶子节点都进行了向上排序。原创 2023-07-04 21:40:59 · 290 阅读 · 0 评论 -
数据结构与算法学习笔记【day01】
日常笔记原创 2023-06-25 16:31:37 · 115 阅读 · 0 评论
分享