自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 数据结构之单链表和双链表(数组实现)

链表是一种很常见和常用的数据结构,本文只介绍单链表和双链表。链表我们一般使用结构体进行实现,在学习的时候我们也是使用结构体来实现链表。但是我们可以使用数组来实现,我先介绍数组和结构体的优缺点,再进行代码的实现。

2025-03-03 17:23:39 522

原创 并查集算法

并查集我们可以看作是一种类似于树的数据结构,但是一开始每个数据都是孤立的,没有与其它节点产生联系,之后根据我们的需要可以将每隔节点相互联系起来,形成一个集合,每个集合直接也可以继续相互联系,形成一个更大的集合。并查集一个作用是并,并就是将两个集合或更多集合组合成一个集合。并查集另一个作用是查,使用并查集我们可以很方便的知道两个元素是不是属于一个集合。

2025-01-01 15:33:54 450

原创 洛谷--亲戚 c语言

在main函数里我们我们先进行数据个数的输入,之后进行并查集的初始化,之后通过find函数将节点直接相互联系起来,最后再进行询问,如果这find函数返回的值相同那么我们就可以判断这两个人是亲戚,否则就不是。在这里我们find函数做了路径压缩优化,使得我们查找的效率提高。这一题是很典型的并查集例题,我们需要先进行初始化,初始化后通过输入将每一个节点相互联系起来,最后通过find函数进行判断,思路很简单,接下来我们看一下代码如何实现。

2025-01-01 15:08:34 229

原创 trie树算法--c语言

trie树,属于一种树,结构大概如下假设我们输入几个字符串,adg,abc,ab,adhe,那么我们可以用这个树进行存储,带星号的表明这个字符串出现过,有相同前缀的那么会在一条路径上,比如adg和adhe,ad都是它们的前缀,所以在一条路径上,当出现不同的时候才会分开,我们通过树的形式将一个个节点连接起来(除了根节点不包含字符,其它每一个节点都包含一个字符)

2024-12-31 22:47:46 414

原创 洛谷--前缀统计c语言

所以我们才要让p=son[p][u]。前面讲的可能很乱,我再总结一下原因,不管我们输入几个字符,cnt[0]永远是0,因为就算我们一开始只输入一个字符,这时son[p][u]=++idx,这时son[p][u]已经为1了(idx一开始初始化为0),那么我们再让p=son[p][u],那么p这时为1,最后结束循环,cnt[p],也就是cnt[1]++,所以cnt[0]永远是0,那么我们询问操作时,一开始p=0,根本不需要管cnt[0],直接让p=son[p][u]就可以了。

2024-12-31 22:12:11 403

原创 我的创作纪念日

收获挺大的,主要是在写文章的时候,对代码的理解加深了,比如某个算法对应的思想一开始不理解,只能去临摹别人的算法,后来通过写文章来讲解题目的思路,一些不懂的地方也逐渐弄懂了。平常有空会进行创作,但是大部分时间还是学东西,写了算法题目后,有空会进行创作来讲解这题的思路和思想。这是我第一个创作时写的代码,当时也困扰了我比较久,后面还是去搜了一些别人的代码才写出来的。//这里我们默认边长小于等于50。我当初写文章只是为了加深一下我对代码的理解,同时也将自己的理解分享出去。

2024-12-30 18:45:33 427

原创 切蛋糕c语言(附解析)

这题为什么要用到单调队列算法,我们稍微分析一下就可以知道,我们要找到某个子区间和的最大值,而每个子区间我们可以用a数组中某两个下标所储存的值相减,比如我们要计算[2,3]这个区间,那么我们只需要让a[3]-a[1]就可以了,就可以知道这个子区间和的值,既然要找最大值,那么我们需要让被减数越大越好,减数越小越好,我们可以用单调队列找到我们前缀和数组里某一个区间内的最小值。这个代码主要用到了两个算法,一个是前缀和,一个是单调队列,在这里我不过多讲述,主要讲一下这一题的思想。

2024-12-30 18:32:08 467

原创 归并排序算法(c语言)

归并排序分为两个部分,一个为归并,一个为排序,归并其实就是递归的二分数组,这里我们额外使用了一个tmp数组是因为我们要将排好序的内容暂存在tmp数组里,之后再将tmp数组的内容复制到我们的原数组里。归并排序是一种很常用的排序方法,在很多情况下都会用到,代码如下(这里我的题目是洛谷的模板排序)(新手写作,可能有些地方没有解释清楚,请谅解和指正)

2024-12-25 21:56:45 226

原创 力扣第四十二题 接雨水(困难难度,c语言附着解析)

可能会有人疑惑,如果出现一直单调递增或递减的高度那会怎么样,如果是单调递增的高度,那我们的lmax就一直是当下我们所指向的数组的值,这时lmax-height[l++]就为0了,sum的值不会变,只有当不是单调递增或者递减时我们这时才会进行积水,sum这时才会相加。这个代码是双指针算法,我参考了别人的解法,大致的思路如下,我们先使用两个指针,分别从数组开始和末尾开始遍历,并且我们使用了两个变量,分别记录当前我们遍历到的左边和右边遇到的最大高度。

2024-12-25 18:24:14 349

原创 c语言不知道数据个数时怎么进行输入(附解析)

不知道数据元素个数时怎么进行输入

2024-10-30 23:47:04 1585 1

原创 c语言--森林排查顺序

第二步我们排查下方,这里使用n-1是因为第一行最右边那个也包括在下方,比如第一行是1 2 3,那么3就不需要再次排查。第四步我们排查上方,使用n-2是因为排查左方的时候已经排查过一个,排查右方的时候也排查过一个,比如。当最外围已经排查五个后,那么第二层就只需要排查三个,这里是17 18 19。第三步我们排查左方,原理跟排查右方相差无几,注意这里任然需要使用n-1.当这一切做好之后,我们就只需要打印数组里的值就可以了。题目:我们需要从森林的外围逐渐排查到中心。在这里,1和7不需要再次排查。

2024-08-30 22:38:55 533

原创 c语言实现五子棋代码(有简单的人机对战,附解析)

前段时间,我和我的小伙伴一起做了关于五子棋的小的团队项目,我将其中一些非核心的内容简化了一下,保留了核心的内容,今天我就和你们来分享一下我们所做小项目。因为我们定义了比较多的函数,所以我将其每个函数都单独讲解,在这个项目中,我做了两个人机对战,一个非常简单的,一个简单的。(声明函数就不展示了)我们先定义两个全局变量。其中flag变量用来表示这个回合谁落子,偶数表示黑方落子,基数表示白方落子。数组中的数组代表子的颜色,2表示黑子,1表示白字。用来清屏。

2024-08-29 16:07:10 2817 6

原创 c语言--矩阵转换(附解析)

1][0] , [1][1] , [1][2] , [1][3] 被转换为 [0][2] , [1][2] , [2][2] , [3][2] ,[3][0] , [3][1] , [3][2] , [3][3] 被转换为 [0][0] , [1][0] , [2][0] , [3][0] ,根据题目分析, [0][0] , [0][1] , [0][2] , [0][3] 被转换为 [0][3] , [1][3] , [2][3] , [3][3] ,printf("请输入整数");

2024-08-28 21:37:10 716

原创 c语言与素数相关的题目

在这里,我们首先进行判断该数是否为素数,如果是素数的话就进行打印,如果是素数,就将变量 i 减去1并且打印 i 的值,进行下一次循环(直到 i 等于1)。因为根据素数的定义(除了1和它本身以外不再有其他因数的自然数),所以我们这里使用k-2.如果不是素数,那么就将 i 减去1并直接进入下一次循环(直到 i 等于1)。(新手写作,如有解释不清楚,请谅解,也请各位大佬指出哪里的解释有问题)设计一个程序, 输入 N, 输出 0~N 之间的所有素数。printf("请输入一个整数");

2024-08-28 12:54:29 432

原创 c语言--兔子繁殖(附解析)

我们先定义一个一维数组并将其初始化,使 i [1]=1,i [2]=1,这里就表示第一和第二个月的兔子总数,这里用n-2是因为我们减去了前两个月的兔子总数,直接开始计算第三个月的兔子数量,之后将每个月的兔子总数用数组保存起来,用sum表示最后我们想要得到的兔子总数。一对刚出生的兔子, 兔子出生第 3 月开始每月都会生一对小兔子, 小兔子出生后同样第 3 月开。(新手写作,如有解释不清楚,请谅解,也请各位大佬指出哪里的解释有问题)始也会每月生一对兔子,如果兔子不死 n 月后家里会有多少对兔子。

2024-08-27 21:17:25 1113 2

原创 c语言实现九九乘法表(附解析)

在这里我们用x变量表示每行式子的个数,比如x等于2就表示这一行有2个式子。

2024-08-27 20:49:04 356

原创 c语言实现杨辉三角(附解析)

因为C(2,5)其实相当于(4*3)/(2*1),所以我们就不断累乘上面的数(也就是变量q),同时也不断累成下面的数(也就是变量w),之后我们将其相除,最后打印就可以得到我们想要的数字了。再根据我们高中的有关排列组合的数学知识,当我们输入4时,第四行其实每个数是(C(0,4)(上面是0,下面是4,后面以此类推),C(1,4),C(2,4),C(3,4),C(4,4)。(新手写作,如有解释不清楚,请谅解,也请各位大佬指出哪里的解释有问题)有了这个公式,那么我们就可以进行设计了。接下来进行代码的分析。

2024-08-26 18:50:31 864

原创 c语言实现打分系统(包括去掉最高分和最低分,附解析)

我们这里进行比较的思路是先固定数组的一个元素(可能用固定这个词表述不当),然后让这个固定的元素与数组内的其它元素进行比较,比如arr[k][0]会与arr[k][1],[k][2]等等元素进行比较(当然还包括它本身)。有关c变量的那个 if 语句是用来寻找最小值的,有关n变量的 if 语句是用来寻找最大值的。第一部分我们创建一个二维数组和一个一维数组,二维数组用来存储选手的每个选手的分数,一维数组用来存储选手的平均分。我们先输入同学的人数,评委的人数和选手的得分。最后让之前定义的一维数组储存我们的平均值。

2024-08-26 17:09:31 1087

原创 用C 语言实现斐波那契数列(附解析,非递归)

在这里我们分为两种情况,一种情况是输入1的情况,那么我们只打印一个数并且退出程序,否则输入两个数以上(包含两个数)那么我们就先打印数列的前两项。第二步生成n+1项,等式左边的m是新生成的项(也就是n+1项),右边的m是第n项。第三步我们将n-1项赋值给变量k(因为新生成了项数,所以这时候的i表示n-1项)(新手写作,如有解释不清楚,请谅解,也请各位大佬指出哪里的解释有问题)之后我们进入循环,这里使用n-2是因为我们已经打印了前两项。进入循环后,第一步我们先用一个中间变量i保存数列n项。

2024-08-25 13:24:42 630

原创 c语言判断素数(附解析)

之后我们用一个for循环,该循环用来判断该数能否被除了1和本身之外的数整除。如果能,就直接打印该数不是素数然后退出程序。这里用i-2是因为将1和该数本身去掉。如果k等于i-2那么就可以判断该数为素数。素数的定义:除了1和本身之外,没有其他的因数的数,即不能被其他数整除。printf("该数不是素数");第一步先判断这个数是不是大于2,如果不大于2就直接退出程序。printf("输入的数字错误");printf("该数是素数");如果不能,那么就让变量k加1,之后继续该循环。第二部分判断该数是否为素数。

2024-08-25 12:14:13 308

原创 c语言菱形代码(附解析)

这里将b变量减1的目的是为了不重复打印,比如说我们选择打印3边长的菱形,那么第三行就是五个星号,如果不将b减去1,那么第四行也会打印五个星号,所以我们在这里将b减去1。这里用n-1是因为我们要确保i[0]到i[n-2]不能有多出来的空位,就比如如果我们不用n-1,那么i[0]就可能一直为0,从而可能导致我们打印出问题。第二个循环是用来打印我们的菱形,在这里当数组里的数为1时就打印星号,数组里的数为0就打印空格。当退出第二个循环的时候,我们选择换行,打印下一行的内容。第一个循环我们用来改变数组的值。

2024-08-24 16:56:12 1045 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除