![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构学习之路
文章平均质量分 92
数据结构的学习,深入浅出~
阿熊不会编程
准大三,阿里云专家博主,支付宝开发者社区优秀季度创作者,主攻C/C++方向。道虽小,不行不至,事虽小,不为不成。
展开
-
希尔排序原理
3、其实预排序的实现和直接插入排序的过程几乎是完全相似,前面也说了当希尔排序的缩小增量为1时,和插入排序没区别,也就是说,插入排序每次都对相邻的数据处理,而希尔排序是将分好的组看成新的数组,例如上面数据的6, 2, 3为一组,我们可以看成其他的数据不存在,只有这一组存在,那么对于这一组而言,希尔排序就是插入排序,将上图的三组都排完序,这一趟预排序就算完成了。2、已排序区数组元素加一,待排序区首元素变为3,end也变为3的下标,tmp记录此元素的值,将tmp与已排序区元素进行比较,首先与5比较,小于5。原创 2023-11-08 23:05:42 · 1943 阅读 · 48 评论 -
归并排序深度剖析
归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。————百度百科实际上归并排序MergeSort)是建立在归并操作上的一种排序算法,利用分治的思想来,将要排序的数据进行逐层分组,一组分两组,两组分四组...直到分到只有一个元素,这个时候在和并元素的同时对元素进行排序,原创 2023-11-02 00:48:46 · 641 阅读 · 47 评论 -
计数排序详解
计数排序(CountSort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n)), 如归并排序堆排序。原创 2023-10-21 07:00:00 · 925 阅读 · 6 评论 -
栈和队列详解
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素————百度百科由此可见栈是一种先进后出(First In Last Out)即FILO结构。//线性栈需要数组int top;//栈顶指针记录元素个数。原创 2023-10-03 20:54:31 · 121 阅读 · 7 评论 -
一文带你学透快排(快速排序C语言版)
快速排序(QuickSort)采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素pivot,利用pivot将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。——————百度百科1、首先设定一个分界值,通过该分界值将数组分成左右两部分。2、将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。原创 2023-10-22 07:00:00 · 850 阅读 · 38 评论 -
链表操作详解
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据 ————百度百科单链表的访问都是由指针进行访问,不需要扩容,对于数据操作比较快速。双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。原创 2023-10-03 17:23:50 · 113 阅读 · 4 评论 -
堆与堆排序操作详解
堆(Heap)是计算机科学中一类特殊的数据结构,是最高效的优先级队列。堆通常是一个可以被看作一棵完全二叉树的数组对象。堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆中某个结点的值总是不大于或不小于其父结点的值;堆总是一棵完全二叉树。将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆斐波那契堆等。堆是线性数据结构,相当于一维数组,有两个直接后继。堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}原创 2023-10-18 14:44:23 · 498 阅读 · 20 评论 -
一文带你搞懂二叉树
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点————百度百科。原创 2023-10-05 11:29:03 · 704 阅读 · 24 评论 -
有环链表环的问题
1.判断链表有环有关于链表,我们总会遇到关于其的各类问题,像反转链表,双向链表,有环链表等,今天,我们就有环链表展开细说。1.判断链表有环方法一:也是最简单粗暴的方法,从头节点开始,依次遍历单链表中的每一个节点。每遍历一次新节点,就与之前所有节点进行比较,如果某个节点被遍历两次,则为有环。(时间复杂度为O(n²),空间复杂度为O(1))。原创 2023-04-11 23:29:54 · 136 阅读 · 6 评论 -
顺序表操作详解
数组可以存储数据,而对数组的数据进行操作,例如增删改查等操作被称为顺序表,顺序表需要大量用到C语言的结构体与指针,我们先来想想,如果想要对一个数组进行数据操作,比如插入元素操作,首先肯定是需要一个数组来存储数据的,那么对于要插入位置的索引是不是还需要一个角标,用来记录元素的个数,在进行元素索引的时候以便于快速找到。typedef struct vector {//结构体定义//size为数组大小,count为数组存储元素个数int* data;//data为数组}vector;原创 2023-10-03 17:24:28 · 195 阅读 · 6 评论