- 博客(47)
- 收藏
- 关注
原创 【C】链式二叉树算法题2
在该题目中,我们解决了如何在递归过程中向数组中存储数据的问题。只需用一个指针变量间接改变即可。所以以后如果遇到类似问题,一定要想到利用指针来改变下标。当然,除了前序遍历,还有中序遍历和后序遍历,在讲解完前序遍历之后,相信这两个遍历也很简单了,可以自己尝试一下:中序遍历//返回树的结点个数return 0;//中序遍历树,把遍历数据存放在数组里面return;\n");exit(1);int n = 0;return arr;后序遍历//求节点个数。
2025-03-10 23:25:28
911
原创 【C】链式二叉树算法题1
其实对于递归算法来说,其实写代码并不是最困难的,重要的是其整个算法的实现逻辑与对于边界条件的思考。如果想熟练运用递归算法的话,就需要对各种边界条件进行考虑,虽然刚开始有点难,但是在练过一定的递归算法的题目之后,相信大家一定可以掌握递归算法。但是也一定不要陷入到递归算法的死循环中,因为递归算法虽然实现简单,但是其对于空间的消耗较大执行效率也不如循环快,所以如果可以用 for 循环或者 while 循环实现的话,最好还是采用循环来解决问题。
2025-03-02 22:11:24
537
原创 【C】堆的应用 -- 堆排序
之前学习了堆,堆的一棵以顺序结构存储的完全二叉树,堆本身又氛围大根堆和小根堆,假设以大根堆为例,由于堆顶部元素是一棵二叉树里面最大的元素,所以如果每次都取堆顶的元素,那么取出的元素就是一个降序排列的序列。至此,我们发现了一个堆的特别重要的一个应用,就是堆排序。
2025-02-24 22:25:26
900
原创 【C】队列与栈的相互转换
其过程如图所示:通过两个队列之间把数据来回调换,就可以实现数据的后入先出,而且这样也可以保证出栈之后,仍是一个空队列和一个非空队列,下一次入栈和出栈的时候也不会出问题。
2025-02-21 21:13:03
1110
原创 【C】栈的应用
栈由于其后进先出(LIFO)的特性,是一种比较重要的数据结构,在日常解决问题过程中应用的也比较多。接下来我们就来看两个应用 -- 括号匹配与进制转换。
2025-02-19 16:56:22
1102
原创 【C】初阶数据结构5 -- 栈
前面学习了两种最基本的数据结构 -- 顺序表和链表,接下来就可以基于这两种数据结构来实现其他数据结构了。其实,其他的数据结构的物理结构要么是数组,要么就是链表,所以学好顺序表和链表是学好其他数据结构的基础。接下里,我们就来看一个新的数据结构 -- 栈。重点一 栈的特点。
2025-02-14 21:41:29
992
原创 【C】初阶数据结构4 -- 双向循环链表
所以找到循环链表的尾节点,并不是判断尾节点的next为不为NULL,而是看尾节点的next指针是否指向开始节点。其中。
2025-02-14 21:40:59
1325
原创 【C】链表算法题5 -- 相交链表
leetcode链接https://leetcode.cn/problems/intersection-of-two-linked-lists/description/https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 给你两个单链表的头节点 和 ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 。 输入:intersectVal = 8, listA = [4,1,8,4,
2025-02-07 23:06:39
517
原创 【C】链表算法题4 -- 合并两个有序链表
leetcode链接https://leetcode.cn/problems/merge-two-sorted-lists/description/https://leetcode.cn/problems/merge-two-sorted-lists/description/将两个合并为一个新的链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。[]很显然,这个题目是给你两个有序链表的首节点,让你返回合并之后链表的首节点。
2025-01-21 21:33:07
1025
原创 【C】链表算法题3 -- 链表的中间结点
leetcode链接https://leetcode.cn/problems/middle-of-the-linked-list/https://leetcode.cn/problems/middle-of-the-linked-list/ 我们来看一下题目描述:给你单链表的头结点 ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例1:输入:head = [1,2,3,4,5]输出:[3,4,5]解释:链表只有一个中间结点,值为 3 。示例2:输入:head = [1,2,
2025-01-21 20:06:18
769
原创 【C】初阶数据结构3 -- 单链表
之前在顺序表那一篇文章中,提到顺序表具有的缺点,比如头插,头删时间复杂度为O(n),realloc增容有消耗等。而在链表中,这些问题将得到解决。所以在这一篇文章里,我们将会讲解链表的定义与性质,以及最简单的链表 -- 单链表的结构,以及基础方法的实现。重点一 链表。
2025-01-14 23:02:09
1062
原创 【C】顺序表算法题 -- 移除元素
同样的,了解了顺序表的实现之后,我们就该通过算法题来巩固顺序表了,接下来我们就来一道算法题移除元素。我们来看一下问题的描述:给你一个数组nums和一个值val,你需要移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为knumsnumskvalnumsnums你的函数函数应该返回 k = 2, 并且 nums中的前两个元素均为 2。
2025-01-14 20:47:41
572
原创 【C】初阶数据结构2 -- 顺序表
所谓线性表,就是指n个相同特性的数据元素的有限序列,也是一组具有相同特性的数据结构的集合,如:顺序表,链表,栈和队列都属于线性表,线性表有个很大的特性,就是逻辑结构上一定是连续的,而物理结构(存储结构)不一定是连续的,如顺序表在逻辑结构和物理结构上都是连续的,而链表在逻辑结构上是连续的,而在物理结构上不是连续的(以后会讲解到)。逻辑结构是指:人们抽象出来用来表示某种数据结构数据元素之间的逻辑上的关系,比如我们习惯上用一些矩形来表示数组,一个箭头来表示指针。
2025-01-13 20:54:58
825
原创 【C】复杂度算法题 -- 旋转数组
学习完时间复杂度和空间复杂度之后,我们就可以应用学过的知识来算法题了,接下里就有一道跟这个有关的算法题 —— 旋转数组。leetcode旋转数组接下来我们来看一下题目描述:给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。向右轮转 1 步:向右轮转 2 步:向右轮转 3 步:这个题目是刚开始给了这么一个函数,其中nums是指要轮转的数组,numSize是要轮转数组的大小,也就是个数,k是要轮转的字符个数。
2025-01-13 20:51:34
954
原创 【C】初阶数据结构1 -- 时间复杂度与空间复杂度
算法也是分好坏的,用有的算法写出来的程序可能运行时间只需要4毫秒,而有的算法写出来的程序可能就会需要8秒甚至9秒,如,堆排序和冒泡排序(以后会讲解),都是100000个数据进行排序,但是堆排序只需要4毫秒,而冒泡排序却需要8秒,所以衡量一个算法的好坏就显得尤为重要,那么该用什么来衡量算法的好坏或者执行效率呢?这里就不得不提到这篇文章的重点,复杂度了。
2025-01-12 10:39:00
1038
原创 【C】预处理详解
/__为两个下划线1 __FILE__ //进行编译的文件2 __LINE__ //当前代码所在行3 __DATE__ //文件被编译的日期4 __TIME__ //文件被编译的时间5 __STDC__ //当前编译器是否符合ANSI C(标准C),如果符合会变成1,不符合会变成0或者未定义int main()return 0;运行结果为:由于VS编译器并不是完全按照ANSI C来设计的,所以__STDC__是未定义的,如果大家有别的编译器可以试一下。int main()
2025-01-12 10:37:17
797
原创 【C】编译与链接
在本文章里面,我们讲会讲解C语言程序是如何从我们写的代码一步步变成计算机可以执行的二进制指令,并最终执行的。C语言程序运行主要包括两大步骤 -- 编译和链接,接下来我们就来一一讲解。
2025-01-09 22:30:03
1116
原创 【C】文件操作
这篇文章我们将会讲解C语言中跟文件相关的操作,包括为什么使用文件,文件是什么,打开与关闭文件,文件的顺序读写,文件的随机读写,文件读取结束的判定以及文件缓冲区。
2025-01-07 23:13:09
993
原创 【C】动态内存管理
在一个结构体里面,最后一个元素允许是未知大小的数组,这个数组就叫做柔性数组成员。注意,柔性数组一定是在结构体里面创建的。int a[0];上述代码里面的a数组就是柔性数组成员,数组元素个数为0,代表没有成员。int a[];上述代码的a数组也是柔性数组,数组里面的元素个数不写,也代表数组里面没有元素。
2025-01-03 21:25:07
934
原创 【C】自定义类型--联合与枚举
在上一篇文章中,我们讲解了有关自定义类型--结构体的相关知识,提到了一个在结构体中特别重要的一个知识,结构体的内存对齐,而C语言中还有两个自定义类型,分别是联合体类型和枚举类型,接下来我们就来讲解一下。
2024-11-10 23:41:14
709
1
原创 自定义类型:结构体
在C语言中,除了整型(int),字符型(char),浮点数(float)等内置类型外,C语言还提供了一些自定义类型,比如结构体啊,联合体啊等等,本篇文章我们就来讲解一下自定义类型:结构体。本文章将结构体分为结构体的声明,结构体变量的创建与初始化,结构体成员的访问,结构体传参,结构体实现位段以及结构体内存对齐。
2024-11-03 23:33:39
566
原创 字符串与内存函数详解
使用strcat函数还有几个要注意的点:(1) 原字符串必须以'\0'结尾(2) 目标字符串也必须有'\0'(3) 目标字符串必须足够大,能把原字符串的内容放到目标字符串里面(4) 目标空间必须是可修改的知道了这些就可以很好的使用strcat函数了,接下来我们就来模拟实现一下。
2024-09-29 23:21:08
813
1
原创 C语言指针详解4——指针的应用
在前几篇文章中,我们讲普通指针,数组指针,函数指针,这一篇文章我们将讲解C语言指针的其他应用,包括typedef关键字,回调函数。目录一 typedef关键字二 回调函数1 回调函数的概念2 qsort函数1) 使用2) 模拟实现 typedef是C语言中的一个关键字,其全称是type define,顾名思义,这个关键字的作用是来定义类型的,但是不是用来定义新的数据类型,而是把其他数据类型(int,float等)重新定义为其他名字,使得类型书写起来更加简便,如:上述代码的作用是把int类型
2024-09-07 22:32:07
1141
原创 C语言指针详解3——函数指针
在上一篇文章中,我们讲解了C语言中一个特殊的指针类型数组指针,这篇文章我们将讲解另一个特殊的指针,函数指针。分为函数指针变量,函数指针数组和函数指针的应用——转移表三个章节。
2024-09-02 23:06:49
690
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人