![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
三个臭皮姜
这个作者很懒,什么都没留下…
展开
-
二叉树的层序遍历(C语言实现)
二叉树的层序遍历,用辅助队列实现。库存代码,好久以前写的了,发这个目的是防止丢失,万一以后需要还能捡起来。原创 2023-02-13 15:59:55 · 529 阅读 · 0 评论 -
串的应用---字符串暴力匹配(C语言实现)
串的应用—字符串暴力匹配(C语言实现)文章目录串的应用---字符串暴力匹配(C语言实现)算法思想--举个例子代码实现测试算法思想–举个例子 来看个图就明白了: 【匹配成功的情况】 ①初始时: ②第一个能匹配,指针后移: ③第二个也能匹配,并且子串已经到了末尾,匹配结束,匹配成功。 【匹配失败】 ①第一步与上面相同:两指针都指向第一个字符。 ②第二步,指针后移: 第二步的时候发现不匹配,这时,需要更新指针 i 的位置,由于第一个字符已经比较过了原创 2021-11-05 07:00:00 · 854 阅读 · 0 评论 -
栈的应用---用栈实现括号匹配(C语言实现)
括号匹配#include<stdio.h>#include<stdlib.h>#include<stdbool.h> //根据C99标准,C语言使用bool类型需要添加这个头文件#define MaxSize 10 //顺序栈这里使用静态分配的方式,所以手动规定最大容量 typedef char ElemType;// //-------结构体定义部分------ //typedef struct{ ElemType data[MaxSize]; i原创 2021-11-04 12:42:10 · 5206 阅读 · 0 评论 -
带权无向图的邻接矩阵表示法(C语言实现)
带权无向图的邻接矩阵表示法(C语言实现)文章目录带权无向图的邻接矩阵表示法(C语言实现)一、邻接矩阵表示法二、本次程序实现的功能三、带权无向图的结构体定义四、创建无向图及邻接矩阵五、输出邻接矩阵六、输出顶点集合七、判断两顶点是否邻接八、全部代码九、测试一、邻接矩阵表示法 定义:所谓邻接矩阵存储,是指用一个一维数组存储图中顶点的信息,用一个二维数组存储图中边的信息(即各顶点之间的邻接关系),存储顶点之间邻接关系的二维数组称为邻接矩阵。 对于带权图而言,若顶点Vi 和 Vj 之间有边相连,则邻接原创 2021-11-02 23:53:21 · 27437 阅读 · 4 评论 -
二叉树相关操作(基于递归,C语言实现)
二叉树相关操作(C语言实现)文章目录二叉树相关操作(C语言实现)一、前序方式创建二叉树二、3种递归方式遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历三、求叶子结点(度为0)个数四、求度为1的结点个数五、求度为2的结点个数六、求某结点的左右孩子七、求某结点的父结点八、求一共有多少个结点销毁树全部代码一、前序方式创建二叉树//前序方式建立 BTnode *CreateTree(){ BTnode *T; char ch; scanf("%c",&ch);//在后台直接输入一整串,例原创 2021-11-01 22:31:03 · 181 阅读 · 0 评论 -
单链表练习题-删除无序单链表中所有的重复元素(两种方法,C语言实现)
单链表练习题-删除无序单链表中所有的重复元素(两种方法,C语言实现)文章目录单链表练习题-删除无序单链表中所有的重复元素(两种方法,C语言实现)一、前言二、两种实现方式与优劣2.1 使用哈希存储2.2 使用两重循环三、全部代码四、测试一、前言 与前一篇单链表练习题-删除有序单链表中的重复元素(C语言实现)不同,本次实现的是删除单链表中所有的重复元素,无论数据是否有序。二、两种实现方式与优劣2.1 使用哈希存储 哈希存储是一种典型的以空间换时间的方法,之前用它来统计数字出现的次数,参见:C原创 2021-10-31 11:26:48 · 1290 阅读 · 7 评论 -
单链表练习题-向有序单链表中插入元素并保持有序(C语言实现)
单链表练习题-向有序单链表中插入元素并保持有序(C语言实现)文章目录单链表练习题-向有序单链表中插入元素并保持有序(C语言实现)一、题目二、思路三、动手实现四、全部代码五、测试一、题目 如图,原本链表就有序:假设现在要插入元素15,我们希望它插入在10和16之间。假设现在要插入元素5,我们希望它插入在7的前面。假设现在要插入元素22,我们希望它插入在20后面。二、思路 由于原来的链表已经有序,那么我们只需要一个指针就可以了。用指针p遍历链表,比较p当前所指元素和p后继的元素,如果要原创 2021-10-29 23:01:18 · 4813 阅读 · 1 评论 -
单链表练习题-构造环以及判断是否有环(C语言实现)
单链表练习题-构造环以及判断是否有环(C语言实现)文章目录单链表练习题-构造环以及判断是否有环(C语言实现)一.题目二.构造环三.判断是否有环四.全部代码五.测试一.题目 如下图所示:本次就是要构造环以及判断是否有环。二.构造环 构造环比较简单,只需要修改某个结点的指针就可以了,为了方便我这里直接修改尾结点的指针,使其指向指定元素的后继,这样就构成了一个环。bool Make_Loop(LinkList *L,ElemType e) //构造环,直接让尾指针指向特定结点的后继原创 2021-10-28 18:15:44 · 869 阅读 · 0 评论 -
单链表练习题-删除有序单链表中的重复元素(C语言实现)
练习题-删除有序单链表中的重复元素(C语言实现)文章目录练习题-删除有序单链表中的重复元素(C语言实现)一、题目二、思路三、代码实现四、全部代码五、测试一、题目 如题所述,是对单链表进行操作,而且链表是有序的,意味着重复元素都是挨在一块儿的,如下图所示: 或者是这样的:二、思路 既然重复元素都是连续挨着的,那么我们可以设置一个快慢指针,用temp指向上一个元素的值,p指向当前元素,如果p所指和temp所指元素相等,那么把p所指的结点删除,temp保持不动,p指针后移;如果p所指和原创 2021-10-06 17:54:38 · 3218 阅读 · 1 评论 -
C语言实现双链表
C语言实现双链表文章目录C语言实现双链表说明实现的功能结构体定义初始化插入结点删除结点输出所有元素全部代码测试说明图片自己画的,有点丑,不要介意。本文来自专栏:数据结构后续还会继续coding。如果有需要可以关注点赞一波。实现的功能 插入结点 删除结点 从头到尾遍历输出所有元素 获取某个结点的前驱和其后继结点获取前驱和后继主要是为了测试双链表是否编写正确,因为双链表可以访问前驱,这是与单链表不同的地方。结构体定义typedef struct BiLinkNode{ Elem原创 2021-10-01 22:24:25 · 744 阅读 · 1 评论 -
C语言实现二分查找
C语言实现二分查找前言 二分查找比较简单,但还是花5分钟写一下,方便以后偷懒。什么是二分查找 二分查找就是折半查找,相信大家都玩过猜数字的游戏,每次用二分法才就可以用最少的次数猜出数字。 假设有一个数组,A[10] = {11,12,13,14,15,16,17,18,19,20}。 定义三个指针:low,mid,high。以及我们要查找的目标数字goal。 初始时low指向第一个元素,high指向最后一个元素,每次mid=(low+high)/2,当目标值在mid的右边时原创 2021-09-23 17:19:23 · 155 阅读 · 0 评论 -
C语言实现顺序队列、循环队列和链式队列
C语言实现顺序队列、循环队列和链式队列文章目录C语言实现顺序队列、循环队列和链式队列一.顺序队列顺序队列的定义顺序队列全部代码二.循环队列循环队列的概念相关操作循环队列全部代码三.链式队列(带头结点)存储类型定义入队出队链式队列全部代码参考资料一.顺序队列顺序队列的实现比较简单,使用数组的方式存储即可。由于这种方式是静态存储,即一旦规定内存大小便不可改变,所以有可能会发生溢出,因而在实际使用中也没有太大的价值。所以我这里只做了一个简单实现,实现基本的入队和出队以及判断队空和队满等功能。顺序队列的定义原创 2021-09-15 16:01:31 · 1949 阅读 · 0 评论 -
C语言实现顺序栈
C语言实现顺序栈文章目录C语言实现顺序栈前言实现的功能主界面截图栈的定义栈的初始化入栈出栈获取栈顶元素全部代码功能测试前言最近在复习数据结构和C语言,就想照着自己的理解继续盲打代码。本次是实现了一个顺序栈,也就是采用静态分配的方式,这种方式实现起来比较简单。后续还会练习实现链栈等数据结构。栈是一种后进先出的数据结构,只允许在一端(栈顶)访问元素。实现的功能 初始化栈 入栈 出栈 获取栈顶元素主界面截图栈的定义typedef int ElemType;//给数据类型取别名,此次原创 2021-09-06 09:53:49 · 1324 阅读 · 0 评论 -
C语言-学生成绩管理系统
C语言-学生成绩管理系统文章目录C语言-学生成绩管理系统前言实现的功能添加学生信息根据学号查询根据学号删除学生记录根据学号查询并修改信息根据语文成绩从高到低排序全部代码系统功能测试前言最近在复习C语言和数据结构,于是用纯C语言写个成绩管理系统练练手。实现的功能系统的主界面如下:如界面所示,主要实现了以下功能: 增加记录 删除记录 查询记录 修改记录 排序 求和求平均分写的比较简单,但是这些基本的功能都实现了,希望能给大家起一个抛砖引玉的作用。该系统有很多可以优化的空间,比如原创 2021-09-03 11:23:34 · 3252 阅读 · 0 评论 -
Sublime Text 3 配置C语言运行环境
Sublime Text 3 配置C语言运行环境文章目录Sublime Text 3 配置C语言运行环境前言1.下载安装 MinGW2.配置MinGw的环境变量3.检查环境是否安装成功4.在Sublime中配置C语言环境参考链接前言 因为之前找了一些教程,按照教程去配置,一直都没有成功,这次成功了就把自己完整的过程记录下来 ,希望能帮到更多的人。1.下载安装 MinGW 简单来说,MinGW是windows下的gcc工具,我们都知道gcc是Linux下的一个编译工具。下载: ①到官网h原创 2021-07-24 23:22:34 · 4440 阅读 · 17 评论 -
C语言真值表验证
题目如下:这里我使用真值表法验证。代码如下:#include<stdio.h>#include<stdlib.h> //exit(0)需要使用这个头文件#define N 1int main(){ int a,b,c,d; bool result1,result2; bool IsEqual; for(a=0;a<=N;a++) { for(b=0;b<=N;b++) { for(c=0;c<=N;c++) {原创 2021-05-26 16:26:33 · 1456 阅读 · 0 评论 -
C语言验证a mod b 和 b mod a的结果
有时候会混淆 3mod10 和 10mod3 的结果,索性写个小代码验证一下。#include<stdio.h>int main(){ for(int i=1;i<=10;i++) { printf("%d mod 10 = %d\n",i,i%10); } printf("------------\n"); for(int i=10;i>=1;i--) { printf("10 mod %d = %d\n",i,10%i); } return 0;}原创 2021-05-20 21:48:36 · 2287 阅读 · 0 评论 -
C语言遍历字符串的两种方式(代码)
一.使用指针#include <stdio.h>#include <string.h>int main(){ char *s="You are beautiful!"; for(int i=0;i<strlen(s);i++) { printf("%c",s[i]); } return 0;}二.字符数组的方式#include <stdio.h>#include <string.h>#de原创 2021-04-30 15:56:04 · 10486 阅读 · 1 评论 -
LeetCode刷题笔记(简单)---数组中两元素的最大乘积(C语言,两种思路)
题目如下:第一种思路当然是万能的暴力破解法:int maxProduct(int* nums, int numsSize){ int max=0; for(int i=0;i<numsSize;i++) { for(int j=i+1;j<numsSize;j++) { max = max>(nums[i]-1)*(nums[j]-1)?max:(nums[i]-1)*(nums[j]-1);原创 2021-04-16 22:41:16 · 410 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---数组拆分(C语言,涉及标准库函数qsort()使用)
题目如下:通过观察可以发现规律:先对原来的数组进行排序,两两排序后的数组,只要取数组单数位置上的元素即为取每组里的最小值,最后求和进行相加即可。本来呢,我自己写了一个冒泡排序来先对原数组排序,然后后面的操作是一样的,执行代码的时候也没有报错,但是我提交的时候,提示我超出了时间限制,其原因是提交的时候测试的数组比较大,我用冒泡的话时间花的确实比较长。于是在dev上测试我的思路,代码如下:#include<stdio.h>#define N 6int main(){ int su原创 2021-04-15 23:27:14 · 364 阅读 · 0 评论 -
C语言统计数字出现的次数
给定一个数组[1,4,2,1,4,5,1,6],统计每个数字出现的次数并输出(不重复)。以前上python课的时候遇到过这样类似的题,Python是用键和值也就是字典来做的,这次自己用C语言写一下。#include<stdio.h>int main(){ int arr[8]={1,4,2,1,4,5,1,6};//给定数组 int res[10]={0};//新建一个数组,数组的容量其实取决于arr数组里最大元素的值 for(int i=0;i<8;i++) { re原创 2021-04-12 22:18:10 · 26108 阅读 · 4 评论 -
LeetCode刷题笔记(简单)---拿硬币(C语言)
题目如下:看完题目我的第一想法是,既然每次能拿走其中一枚或两枚,那就每次拿2枚,则让堆的数量每次-2就行,等小于等于的时候便是拿完了。int minCount(int* coins, int coinsSize){ int count=0; for(int i=0;i<coinsSize;i++) { while(coins[i]>0) { coins[i]=coins[i]-2; co原创 2021-03-31 19:25:21 · 365 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---在既定时间做作业的学生人数(C语言)
题目如下:有史以来遇到的最简单的一个题。int busyStudent(int* startTime, int startTimeSize, int* endTime, int endTimeSize, int queryTime){ int count=0; for(int i=0;i<startTimeSize;i++) if(queryTime>=startTime[i]&&queryTime<=endTime[i])//满足条件原创 2021-03-31 18:57:54 · 168 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---矩阵对角线元素的和(C语言)
题目如下:题目简单明了,不再解释。我的思路是应该有两种办法,第一种是区分矩阵的行数是奇数还是偶数,因为是正方形矩阵,所以列数与行数一致,如果是奇数,那么主对角线和副对角线之间会有一个交点,求和之后把这个点的值减去即可,如果行数是偶数,那就不用减;第二种无论行数是奇数还是偶数,想办法找到一个通式,即无论哪种情况都适用;这里实现了第一种:int diagonalSum(int** mat, int matSize, int* matColSize){ int sum=0; for(in原创 2021-03-29 11:49:50 · 284 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---找到最高海拔(C语言)
题目如下:这题题目意思也比较明确,初始海拔为0,然后得到的新数组来自于与gain数组的和。第一次提交:int largestAltitude(int* gain, int gainSize){ int *res = (int *)malloc(sizeof(int)*(gainSize+1)); res[0]=0; int maxnum=0; for(int i=1;i<gainSize+1;i++) { res[i]=res[i-1]+g原创 2021-03-28 22:27:15 · 350 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---访问所有点的最小时间(C语言)
题目如下:题目乍一看好像挺吓人,其实仔细观察之后不难发现规律:两个点之间的访问时间=max(两点横坐标之差,两点纵坐标之差)如果存在多个点,那么累加即可。第一次提交:int minTimeToVisitAllPoints(int** points, int pointsSize, int* pointsColSize){ int sum = 0,t1,t2; for(int i=1;i<pointsSize;i++) { t1 = abs(poin原创 2021-03-26 12:04:57 · 144 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---有多少小于当前数字的数字(C语言)
本题很简单了。int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){ int* res = malloc(sizeof(int) * numsSize); int count=0; for(int i=0;i<numsSize;i++) { for(int j=0;j<numsSize;j++) { if(num.原创 2021-03-25 12:37:47 · 172 阅读 · 0 评论 -
双指针小技巧1(C语言实现)
今天在LeetCode上学习了双指针这一个小技巧,链接:https://leetcode-cn.com/leetbook/read/array-and-string/cmf5c/特自己用C语言实现这一小技巧。使用双指针技巧,其思想是分别将两个指针分别指向数组的开头及末尾,然后将其指向的元素进行交换,再将指针向中间移动一步,继续交换,直到这两个指针相遇。利用这个技巧应该能省下不少计算量,尤其是在数据量比较大的时候,为此我还写了个简单的冒泡排序与之就数据的交换次数作了比较。完整代码如下:#inclu原创 2021-03-23 20:34:36 · 261 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---解压缩编码列表(C语言)
题目如下:一开始没看懂题目啥意思,直到看了示例才明白。所以解题思路应该是:nums数组的奇数位为对应偶数位出现的次数,因而要将其作为循环条件。第一次提交的代码:int* decompressRLElist(int* nums, int numsSize, int* returnSize){ int *res = (int *)malloc(sizeof(int)*numsSize); int k=0; for(int i=0;i<numsSize;i=i+2)原创 2021-03-23 20:19:39 · 124 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---统计匹配检索规则的物品数量(C语言)
题目如下:题目意思:按接收到的ruleKey作为键索引,即对应二维数组的行,按接收到的ruleValue作为值索引,即对应二维数组的列,如果二者都满足条件,那么计数+1.第一次提交:#include<string.h>int countMatches(char *** items, int itemsSize, int* itemsColSize, char * ruleKey, char * ruleValue){ int count = 0; for(int i=0原创 2021-03-22 11:39:14 · 169 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---重新排列数组(C语言)
题目如下:题目的意思其实比较清楚了:重新排列的数组中,偶数位置的元素从n开始,奇数位置从0开始。故而有如下代码:int* shuffle(int* nums, int numsSize, int n, int* returnSize){ int *results = (int *)malloc(numsSize * sizeof(int));//重新分配内存 int count=2;//用于控制区分偶数位和奇数位 for(int k=0,i=0,j=n;k<numsSi原创 2021-03-21 14:19:23 · 369 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---最富有客户的资产总量(C语言)
题目如下:题目意思很清楚:就是要把二维数组里面的元素相加,然后返回和的最大值。第一次提交:int maximumWealth(int** accounts, int accountsSize, int* accountsColSize){ int res[50]={0},MaxNum=0; for(int i=0;i<accountsSize;i++) { for(int j=0;j<accountsColSize[i];j++)原创 2021-03-20 13:42:02 · 865 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---数组异或操作(C语言)
题目如下:题目的意思也很明了:题目给定的n用于定数组的长度,start参与数组元素的确定,而数组每个元素的赋值公式为:nums[i] = start + 2*i所以解题的思路很简单,首先要创建数组,接着为元素赋值,然后依次将这些元素按位异或即可,而C语言的异或操作为“^”。我的代码如下:int xorOperation(int n, int start){ //创建数组 int nums[n],result; for(int i=0;i<n;i++) {原创 2021-03-19 10:35:58 · 514 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---拥有最多糖果的孩子(C语言)
题目如下:题目的示例很长,解释的很详细,总的来说思路就是:先找到目前拥有最多数量的孩子,找到这个最大值,然后依次加上额外分配来的与这个最大值比较,如果能够比这个值大,那么这个位置赋值为true,反之为false.所以可以写出下面的代码:bool* kidsWithCandies(int* candies, int candiesSize, int extraCandies, int* returnSize){ //先动态分配内存,存储着结果的一个bool型数组 bool *results原创 2021-03-18 20:49:43 · 154 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---好数对的题目(C语言)
题目如下:第一次提交:int numIdenticalPairs(int* nums, int numsSize){ int count=0; for(int i=0;i<numsSize;i++) { for(int j=1;j<numsSize;j++) if (nums[i]==nums[j]&&(i<j)) count++; } return cou原创 2021-03-17 11:58:38 · 408 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---一维数组的动态和(C语言)
题目如下:我的通过代码:int* runningSum(int* nums, int numsSize, int* returnSize){ for(int i=1;i<numsSize;i++) { nums[i] = nums[i] + nums[i-1]; } *returnSize = numsSize; return nums;}我又尝试把“nums[i] = nums[i] + nums[i-1];”换成原创 2021-03-16 10:50:08 · 512 阅读 · 0 评论 -
LeetCode刷题笔记(简单)---猜数字
题目如下:题本身比较简单,因为自己也比较菜,只能从简单的练起。我的通过代码:int game(int* guess, int guessSize, int* answer, int answerSize){ int count = 0; for(int i=0;i<guessSize;i++) { if(guess[i]==answer[i]) { count++; } } retu原创 2021-03-15 22:13:45 · 111 阅读 · 0 评论