
数据结构
文章平均质量分 92
利用C语言学习数据结构相关知识,预计将收录顺序表、链表、栈、队列、二叉树、排序等相关知识,一方面可以学到数据结构的知识,另一方面还能大大提高你的C语言代码能力。
大耳朵土土垚
越努力,越幸运。
展开
-
【数据结构】筛选法建堆
给你一个顺序表或数组(一串数据),通常来说建堆有两种方法一种**堆向上调整算法**,一种**堆向下调整算法建堆**也就是**筛选法**建堆。筛选法建堆是一种快速建堆的方法,它是在堆排序算法中使用的。这种方法的基本思想是通过不断筛选节点,如果建大堆就将大的节点向上筛选,小的节点向下筛选,小堆就反之,最终得到一个有序的堆。原创 2024-06-05 23:42:05 · 5033 阅读 · 36 评论 -
数据结构——lesson13排序之计数排序
计数排序基本思想:1. 统计相同元素出现次数2. 根据统计的结果将序列回收到原来的序列中我们这里利用malloc开辟一个数组来统计相同元素出现的次数,用该数字下标表示相同元素原创 2024-03-31 15:34:49 · 3250 阅读 · 108 评论 -
数据结构——lesson12排序之归并排序
我们学习了归并排序的两种实现——递归与非递归版;并分析了归并排序的时间和空间复杂度原创 2024-03-31 14:11:37 · 2794 阅读 · 67 评论 -
数据结构——lesson11排序之快速排序
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其==基本思想==为:任取待排序元素序列中的某元素作为基准值key,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列==重复==(这里使用递归来重复,非递归版本将在后续讲解)该过程,直到所有元素都排列在相应位置上为止。 那怎么实现左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值呢?下面将介绍三个方法实现,分别是Hoare版本实现、挖坑法和前后指原创 2024-03-26 17:03:04 · 3168 阅读 · 102 评论 -
数据结构——排序之冒泡排序
冒泡排序(BubbleSort)是一种计算机科学领域的较简单的排序算法。它的基本思想是通过重复遍历待排序的数据集,并依次比较相邻的两个数据项,如果它们的顺序错误则进行交换。这个过程会持续重复直到所有相邻的数据项都已经交换完毕,此时说明该数据集已经排好序。冒泡排序的名称来源于排序过程中,较小的数据项会被逐渐“浮”到数组顶部,这个过程就像碳酸饮料中二氧化碳气泡最终会上浮到顶部的现象一样。因此,这种排序算法因其这一特性而得名。冒泡函数的核心思想。原创 2024-03-22 23:21:01 · 6183 阅读 · 48 评论 -
数据结构——循环队列的实现
循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。MyCircularQueue(k): 构造器,设置队列长度为 k。Front: 从队首获取元素。如果队列为空,返回 -1。Rear: 获取队尾元素。原创 2024-03-21 23:42:46 · 3674 阅读 · 76 评论 -
数据结构——lesson10排序之插入排序
元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)从下标为1开始每次拿出数组的一位数与前面的数进行比较,按照最坏的情况前面所有的数都比较一次,时间复杂度可以看成1+2+3+4+…+n-1;结果是O(N^2);如果元素集合接近有序则不需要和前面所有的数比较时间复杂度大大减少,最好时(有序)可以达到O(n).空间复杂度:O(1),它是一种稳定的排序算法稳定性:稳定插入排序也有两种——直接插入排序和希尔排序;原创 2024-03-18 23:11:24 · 4278 阅读 · 75 评论 -
数据结构——lesson8二叉树的实现
以上就是有关二叉树实现的内容啦 ~ 关键是要理解递归是怎么实现的,利用二叉树由根节点、左右子树构成的特性来实现递归,完结撒花 ~🥳🥳🎉🎉🎉。原创 2024-03-17 23:04:45 · 3043 阅读 · 181 评论 -
数据结构——lesson9排序之选择排序
以上就是选择排序包含的两种排序——直接选择排序和堆排序啦~ 堆排序在之前的博客中有详细讲过不过是建的小堆实现的降序,求最大前k个值,这里我们稍微改了点代码实现建的小堆实现升序;为什么升序要建大堆原因已经在文中详细解析过,大家有什么问题或者想法都可以打在评论区或者私信我🥳🥳完结撒花 ~🎉🎉🎉。原创 2024-03-17 16:55:32 · 3163 阅读 · 63 评论 -
数据结构——二叉树的层序遍历
除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。层序遍历关键点在于它对于队列的使用与理解,🥳🥳大家都学废了吗完结撒花~ 🎉🎉🎉。原创 2024-03-13 23:14:06 · 2192 阅读 · 51 评论 -
数据结构——二叉树的遍历【前序、中序、后序】
按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历:1. 前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。2. 中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。3. 后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。原创 2024-03-11 21:48:19 · 3159 阅读 · 46 评论 -
数据结构——堆的应用 Topk问题
以上就是数据结构中利用堆排序求解Topk问题啦,关键在于对于堆排序的理解与运用~有疑问的小伙伴可以将问题打在评论区或者私信我哦 ~完结撒花 ~🥳🥳🎉🎉🎉。原创 2024-03-10 13:25:36 · 2387 阅读 · 36 评论 -
数据结构——堆的应用 堆排序详解
以上就是堆的应用——堆排序啦~,我们发现可以不用写堆的实现代码就可以将一个数组排成堆🥳🥳,关键在于堆向上调整与向下调整算法的理解与运用,大家都学废了吗 ,💞💞 完结撒花 ~🎉🎉🎉。原创 2024-03-09 14:53:58 · 3226 阅读 · 87 评论 -
数据结构——lesson7二叉树 堆的介绍与实现
如果有一个关键码的集合K = { k1,k2 ,k3 ,…,kn-1 },把它的所有元素按的顺序存储方式存储在一个中,并满足:ki =k(2i+2) ) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。✨✨简单来说大堆指的是父节点都大于子节点的完全二叉树;小堆指的是父节点都小于子节点的完全二叉树;大堆的根节点是最大的,小堆是最小的。原创 2024-03-07 23:49:50 · 2496 阅读 · 58 评论 -
数据结构——lesson6二叉树基础
数据结构二叉树相关知识概念的学习原创 2024-03-07 13:49:21 · 2765 阅读 · 49 评论 -
【04】C语言括号匹配问题
有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。3.每个右括号都有一个对应的相同类型的左括号。结语以上就是该函数的实现完整代码啦~完结撒花🎉🎉🥳点个赞再走吧 ~原创 2024-03-03 17:06:53 · 2888 阅读 · 81 评论 -
数据结构——lesson5栈和队列详解
数据结构栈和队列完整实现原创 2024-03-03 15:10:50 · 2660 阅读 · 69 评论 -
数据结构——lesson4带头双向循环链表实现
带头双向循环链表(Doubly Circular Linked List with a Head)是一种链表数据结构,它具有以下特点:1.头节点:带头双向循环链表包含一个头节点,它位于链表的起始位置,并且不存储实际数据。头节点的前驱指针指向尾节点,头节点的后继指针指向第一个实际数据节点。2.循环连接:尾节点的后继指针指向头节点,而头节点的前驱指针指向尾节点,将链表形成一个循环连接的闭环。这样可以使链表在遍历时可以无限循环,方便实现循环操作。3.双向连接。原创 2024-02-29 17:05:18 · 2999 阅读 · 105 评论 -
数据结构——链表OJ题
链表oj题练习,链表尾插,我们可以用一个tail指针来记录尾插后的节点,尾插直接在tail节点后即可,这样就不用每次尾插都循环遍历,大大减少了时间复杂度 ,提高了运行效率。原创 2024-02-20 23:59:26 · 3773 阅读 · 87 评论 -
数据结构——lesson1时间复杂度和空间复杂度
时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。所以对空间复杂度很是在乎。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。一个算法所花费的时间与其中语句的执行次数成正比例,所以算法中的基本操作的执行次数,为算法的时间复杂度。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。原创 2023-12-06 14:25:37 · 1343 阅读 · 3 评论 -
数据结构——lesson3单链表介绍及实现
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。逻辑图如下:可以看出链表有两个变量,一个存放数据,另一个存放指向下一节点的指针;此外链表还具有以下特征:(1)链表在逻辑上连续,但在物理上不一定连续;(2)链表的节点在现实中一般都是在堆上开辟出来的,所以使用结束后需要释放空间;(3)从堆上申请的空间是按照一定策略分配的,所以物理空间可能连续也可能不连续。//存放数据//存放下一个节点的指针}SListNode;原创 2024-02-18 20:52:32 · 2964 阅读 · 59 评论 -
数据结构——lesson2线性表和顺序表
在学习顺序表之前我们要了解什么是线性表?1.线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...2.线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。原创 2024-02-13 22:29:52 · 3410 阅读 · 59 评论