数据结构
文章平均质量分 82
简单讲述数据结构
一只努力锋
一起努力
展开
-
数据结构——排序
将已有序的子序列合并,得到完全有序的序列;:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;在此之前我们先把准备工作做好,为了可以直观的看出各个排序的速度,以及更有条理,我们还是老样子分装三个文件,rost.c用来写各个排序的实现函数,rost.h放函数的头文件,test.c我们来进行函数的测试与比较。原创 2024-04-11 16:44:15 · 1001 阅读 · 0 评论 -
数据结构——二叉树(OJ练习)
这一题可跟我们前一期的前序遍历有所不同,我们仔细观察一下他给我们的参数是一个二叉树的根和一个int*的指针,这个指针是输出型指针,也就是说这个指针是出题人用来获取二叉树节点个数的,而这个函数的返回类型是int*,它要我们返回一个存储二叉树数据的数组,所以我们这里最好动态开辟内存来存储,我们仔细观察该对称二叉树,我们发现互相对称的节点它们的左子树与右子树分别相等,这就是突破口,我们可以重新创建一个函数,将参数分成两个一左一右两个节点,然后向下比较,这个过程与上一题类似。我们可以从这道题找出二叉树创建的函数。原创 2024-04-08 16:51:41 · 791 阅读 · 1 评论 -
数据结构——二叉树链式结构的实现
设二叉树的根节点所在 层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层 上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。要实现这个函数我们先要知道我们是用递归实现的我们返回x的节点时是一层一层返回的,所有我们找到x后要逐层返回x的指针,思路是比较简单的找到x的节点我们就逐层返回没找到我们就返回NULL。我们遍历二叉树,如果遇到叶子节点我们返回1,如果遇到空指针返回0.那我们终止递归的条件是不是出现了?原创 2024-04-07 17:11:52 · 1006 阅读 · 0 评论 -
数据结构——二叉树(堆)
的。树类似于下面的结构。原创 2024-04-03 20:52:03 · 1093 阅读 · 0 评论 -
数据结构——队列
我们首先要创建一个链表结构,用于存储数据,然后创建一个队列结构用于记录队列的基础数据。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,我们创建一个链表结构和队列结构的指针,(还是分装在一个测试函数中)我们发现队列刚好与栈相反,那我们下面来实现一个队列。大家好我是小锋,今天我们来学习队列。出队列:进行删除操作的一端称为队头。入队列:进行插入操作的一端称为队尾。下面我们才开始进行队列操作。我们可以来测试一下这个队列。获取队列中有效元素个数。这里我们用链表来实现。原创 2024-03-30 19:10:41 · 610 阅读 · 0 评论 -
数据结构——栈
那么大家思考一个问题我们在压栈1,2,3,4,它出栈就是4,3,2,1,吗?这里有两种版本的顺序表静态的实际应用不大,我们用动态的版本来实现链表。以上就是全部内容了,如果有错误或者不足的地方欢迎大家给予建议。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。其实不一定我们可以边压栈边出栈它的顺序也可以是1,2,3,4,压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。这里的操作都是顺序表的常规操作了我就不细说了。大家好我是小锋,今天我们来学习一下栈,原创 2024-03-30 16:12:27 · 953 阅读 · 2 评论 -
数据结构——链表(双向链表)
这时我们就要用到断言了,但我们发现断言的条件也不好写,这时我们的bool类型就要大展身手了。大家好,我是小峰,今天给大家讲解的是双向链表,我们先来看看链表的结构。以上就是全部内容了,如果有错误或者不足的地方欢迎大家给予建议。来很多优势,实现反而简单了,后面我们代码实现了就知道了。这个代码是有点小问题的大家可以想想如果参数只有头节点呢?那接下来我们就可以测试一下我们写的尾插数据。我们排列一些就可以看出链表的结构种类。我们今天讲解的是双向带头循环链表。它就会报错,并提示我们在哪一行。在pos的前面插入数据。原创 2024-03-29 16:31:12 · 373 阅读 · 0 评论 -
数据结构——链表(练习题)
这道题我们的思路是分别找出长的链表与短的链表节点个数然后用长的节点数减去短的节点数得到的数就是长的链表比短的链表多出的节点个数然后创建两个指针long,short,long先走多出的个数然后再一起走当long与short指向的next相等时就找到了相交节点。让我们来看看这道题,我的思路是快慢指针,类似追击问题,我们创建两个指针一个指针以一次两个节点的速度走下去,一个指针一次一个节点走下去,如果是有环的链表那么指针一定会相交,如果不是环形链表那么快的会遇到NULL。大家好,我是小锋我们继续来学习链表。原创 2024-03-28 19:43:48 · 1139 阅读 · 0 评论 -
数据结构——链表(单链表)
我们想一想在链表的头部插入数据我们只需要开辟一个链表空间mon然后另它的next指向当前链表的表头的地址,并将mon的地址交给表头的指针是不是就可以插入数据并且将链表连接起来了?我们通过图可以看出尾插数据要开辟一个新的节点然后让原链表的最后一个节点的next指向新开辟出来的节点并将新开辟的节点的next为空。这个就是链表的逻辑结构了,一个节点中有指向下一个节点的指针,这样走下去最后一个节点中放的是空指针NULL,像链条一样一环扣一环。这里开辟一个新的链表空间我们还会用到所有我们用一个函数来实现。原创 2024-03-26 20:24:17 · 1191 阅读 · 1 评论 -
数据结构——顺序表
我们可以看出这种定长的数组能存储多少数据一开始就已经规定好了,那我们可不可以弄一个动态的表,如果空间满了我们可以动态开辟空间?这里与前面一样也是覆盖删除,要注意的是保证pos的位置比SZ小或者相等,还要保证删除的次数不能大于SZ。接下来我们来讲尾删数据,其实很简单,我们只需要把SZ--就行了,但是要注意断言SZ要大于0,大家有没有发现顺序表的操作与我们写过的通讯录特别相似,因为通讯录的底层逻辑就是顺序表。这里我们要注意的是我们不能在没有数据的地方插入。我们断言是比较暴力的解决方法,我们还有温柔的解决方法。原创 2024-03-25 20:34:05 · 1051 阅读 · 1 评论 -
时间复杂度和空间复杂度
大家好我是小锋,今天给大家带来的是时间复杂度和空间复杂度。在正式讲之前我想问问大家我们如何去衡量一个算法的好坏就像这个计算斐波那契数列的函数它非常简洁但越简洁就代表算法越好吗?算法在编写成可执行程序后,运行时需要耗费时间资源和空间内存资源。因此,即时间复杂度和空间复杂度。。在计算 机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计 算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。时间复杂度的定义:在计算机科学中,原创 2024-03-21 20:06:29 · 825 阅读 · 1 评论