![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构初阶详解
文章平均质量分 91
数据结构使用C语言实现,通过OJ题深入理解。
小林熬夜学编程
熬夜学编程的小林,谢谢大家的关注。
展开
-
【数据结构】第十九弹---C语言实现冒泡排序算法
冒泡排序的基本思想,代码的初步实现,代码优化,代码测试,时空复杂度分析,模拟实现qsort函数~~~原创 2024-06-22 11:30:31 · 1703 阅读 · 122 评论 -
【数据结构】第十八弹---C语言实现堆排序
堆排序基本思想,向下向上调整算法,堆排序代码实现及时空复杂度原创 2024-06-20 11:51:27 · 1424 阅读 · 117 评论 -
【数据结构】第十七弹---C语言实现选择排序
选择排序的思想,代码实现,代码测试,时空复杂度分析~~~原创 2024-06-18 12:12:30 · 1401 阅读 · 98 评论 -
数据结构第一弹---时间复杂度
算法效率是指算法执行所需的时间和资源。 一个高效的算法能够在较短的时间内完成任务,使用较少的内存和处理器资源。 与低效的算法相比,高效的算法能够显著提高程序的响应速度和整体性能。从算法效率的概念角度出发,算法的好坏主要跟时间和资源有关,所以通常衡量一个算法的好坏取决于时间和资源,也就是我们下面需要学习的时间复杂度和空间复杂度。下面例举斐波那契数列的例子。使用递归实现斐波那契数列。根据时间大O渐进表示法计算得出,时间复杂度为O(N),空间复杂度也为O(N),那为什么是这样的结果呢,接下来我们通过复杂度的详原创 2023-12-30 17:36:12 · 1460 阅读 · 10 评论 -
数据结构第二弹---空间复杂度
上一弹我们讲述了用时间复杂度(程序指令的执行次数)来衡量一个算法的好坏,这一弹我们讲述用空间复杂度来衡量算法的好坏。注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。简而言之空间复杂度就是额外开辟的变量个数。1.因为空间复杂度是额外开辟的变量个数冒泡排序额外开辟的变量有exchange和交换数值函数的临时变量,但是两个变量都不会随着N的变化而变化,所以属于常量个变量,因此空间复杂度为O(1)。2.原创 2023-12-31 12:26:07 · 1064 阅读 · 18 评论 -
数据结构第三弹----顺序表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。注:顺序表不仅仅只要下面实现的这些函数喔,实现方式也是不唯一的,有兴趣的uu可以将头插尾插头删原创 2024-01-01 12:23:55 · 863 阅读 · 17 评论 -
数据结构第四弹---数组相关OJ题
移除元素下图为思路三的画图分析喔,想了解其他思路的分析私信博主喔!思路三1.5、通过展示删除有序数组思路三思路三2.5、通过展示合并两个有序数组思路二思路二3.5、通过展示注:每个题目只写了一种最简单思路实现喔,有兴趣的uu可以去实现一下其他的思路喔,有不理解的也可以问博主喔!!!本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!原创 2024-01-02 11:09:02 · 547 阅读 · 11 评论 -
数据结构第五弹---单链表
实现一个数据结构头文件是必不可少的,那么实现单链表可能用到的头文件有哪些呢?以下是实现单链表常见的头文件包含。要实现一个单链表,首先得有一个单链表的结构,那个这个结构应该怎么创建呢?根据定义需要存储一个数据和一个指向下一个结点的指针。根据顺序表的经验,我们存储数据的类型链表结构的名字用typedef定义。//单链表//定义数据类型,可以根据需要更改//数据域 存储数据//指针域 存储指向下一个结点的指针}SList;原创 2024-01-03 13:23:36 · 1437 阅读 · 17 评论 -
数据结构第六弹---带头双向循环链表
以下是实现双向循环链表可能用到的头文件。以下是博主创建的双向循环链表的结构,可以根据自己的喜好创建喔。建议:创建结构时最好能通俗易懂,最好不用拼音创建。//定义数据类型,可以根据需要更改//数据域 存储数据//指针域 存储指向下一个结点的指针//指针域 存储指向前一个结点的指针}ListNode;原创 2024-01-04 11:32:31 · 1598 阅读 · 36 评论 -
数据结构第七弹---栈
以下是实现栈可能用到的头文件。以下是博主创建的双向循环链表的结构,可以根据自己的喜好创建喔。建议:创建结构时最好能通俗易懂,最好不用拼音创建。//存放数据int top;//数据个数,top-1为栈顶下标//容量}Stack;原创 2024-01-05 11:28:17 · 1466 阅读 · 33 评论 -
数据结构第八弹---队列
以下是实现队列可能用到的头文件。以下是博主创建的队列结构,可以根据自己的喜好创建喔。建议:创建结构时最好能通俗易懂,最好不用拼音创建。//存放下一个结点指针//存放数据}QueueNode;//头结点//尾结点}Queue;原创 2024-01-06 16:17:49 · 2092 阅读 · 60 评论 -
数据结构第九弹---循环队列
顺序队列在使用过程中容易出现虚假的满状态, 为了解决这个问题,就产生了一个较巧妙的方法,将顺序队列臆造为一个环状的空间,称之为循环队列。循环队列中指针和队列元素之间的关系不变,我们只需要利用模运算就可以很容易实现指针的循环移动。但是循环队列中存在一个问题,在循环队列中只凭头指针front等于尾指针rear无法判别队列空间是“空”还是“满”,可有两种处理方法:其一是另设一个标志位以区别队列是“空”还是“满”;其二是少用一个元素空间,约定以“原创 2024-01-07 13:33:19 · 1498 阅读 · 20 评论 -
数据结构十弹---二叉树
1.有一个特殊的结点,称为根结点,根节点没有前驱结点。2.除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。因此,树是递归定义的。注意:1.树形结构中,子树之间不能有交集,否则就不是树形结构。2.除了根结点外,每个结点有且仅有一个父结点。3.一颗N个结点的树有N-1条边。1.节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为原创 2024-01-08 13:22:34 · 1416 阅读 · 23 评论 -
数据结构第十一弹---堆
以下是实现堆可能用到的头文件。堆的结构定义//存放数据的动态数组int size;//有效数据个数//数组容量}HP;原创 2024-01-09 11:23:29 · 1524 阅读 · 25 评论 -
数据结构第十二弹---堆的应用
要学习堆排序,首先要学习堆的向下调整算法,因为要用堆排序,你首先得建堆,而建堆需要执行多次堆的向下调整算法。但是,使用向下调整算法需要满足一个前提: 若想将其调整为小堆,那么根结点的左右子树必须都为小堆。 若想将其调整为大堆,那么根结点的左右子树必须都为大堆。 使用堆的向下调整算法需要满足其根结点的左右子树均为大堆或是小堆才行,那么如何才能将一个任意树调整为堆呢?建堆代码根据上一弹堆的向下调整算法时间复杂度计算可知,建堆的时间复杂度为O(N)。那么堆建好后,如何进行堆排序呢?步骤如下:为什原创 2024-01-10 11:56:26 · 2394 阅读 · 51 评论 -
数据结构第十三弹---链式二叉树基本操作(上)
实现一个数据结构少不了数据的定义,所以第一步需要定义二叉树的机构。//定义数据类型,可以根据需要更改//左指针//右指针//存储数据}BTNode;原创 2024-01-13 14:41:14 · 2027 阅读 · 48 评论 -
数据结构第十四弹---链式二叉树基本操作(下)
如何翻转一颗二叉树?首先我们可以先观察一下翻转前后的变化。如下图。画图分析通过观察,可以发现:翻转后,根的左右子树的位置交换了;根的孩子的左右子树的位置也交换了;根的孩子的孩子的左右子树的位置也交换了…代码实现2、判断两棵树是否相同根据上图可知,相等的两棵树需要根节点数值相等,左右子树数值也相等。代码实现3、判断二叉树是否是单值二叉树单值二叉树:即二叉树的每个结点具有相同的值。代码实现4、对称二叉树如上图所示,事例一为对称二叉树,事例二不为对称二叉树。可以得知,对称二叉树左孩子等原创 2024-01-14 12:31:29 · 2969 阅读 · 67 评论 -
【数据结构】第十五弹---C语言实现直接插入排序
排序的概念分类,排序应用,常见的排序算法,常见的排序算法性能测试,直接插入排序的基本思想,代码实现,代码测试,时空复杂度分析~~~原创 2024-06-13 09:46:03 · 1570 阅读 · 123 评论 -
【数据结构】第十六弹---C语言实现希尔排序
希尔排序的预排序实现,整体实现,时空复杂度分析,与直接插入排序的性能比较~~~原创 2024-06-15 12:52:43 · 1793 阅读 · 129 评论