![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言学习
文章平均质量分 67
C语言学习过程中遇到的知识点总结
lzh20040919
这个作者很懒,什么都没留下…
展开
-
【数据结构】快速排序(详解)
在待排序的序列中,选择一个元素作为基准元素(key)。这个元素可以是序列的第一个元素、最后一个元素或者任意一个元素,甚至是随机选取的一个元素。:从序列的一端开始(可以是左端或右端),将遇到的第一个比基准元素小(或大)的元素填入坑中,并形成一个新的坑。在非递归版本中,我们使用栈(或队列)来保存待排序的子数组的起始和结束索引,而不是直接递归调用;:一个记录序列的开始的下标(left),另一个记录序列的末尾的下标(right)。:此时,基准值左边的所有元素都比基准值小,基准值右边的所有元素都比基准值大。原创 2024-05-21 16:53:45 · 1097 阅读 · 0 评论 -
【数据结构】排序详解(希尔排序,快速排序,堆排序,插入排序,选择排序,冒泡排序)
元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法4.稳定性:稳定希尔排序是对直接插入排序的优化当gap>1时都是预排序,目的是让数组更接近有序。当gap==1时,数组已经接近有序,这样排序就会很快。这样整体而言,可以达到优化的效果希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在不同书上给出的希尔排序的时间复杂度都不一样冒泡排序是一种非常容易理解的排序时间复杂度:O(N^2)原创 2024-05-21 16:55:25 · 917 阅读 · 0 评论 -
树的概念与结构(详解)
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分为M(M>0)个互不相交的集合T1,T2,......,Tm,其中每个集合Ti(1<=i<=m)又是一颗结构与树类似的子树。每颗子树的根节点有且只有一个前驱结点,可以由0个或多个后继结点因此,树是递归定义的注意:树形结构中,子树之间不能有交集,否则就不是树形结构。原创 2024-05-17 13:43:07 · 1018 阅读 · 0 评论 -
C语言实现对浮点数取整及四舍五入
如果说你的编译器支持C99标准,那么可以直接用round()函数;该函数的作用就是将一个小数四舍五入为整数。功 能: 返回大于或者等于指定表达式的最小整数。功能: 函数返回不大于arg的最大整数值。C语言中向下取整的函数为floor(),C语言中向上取整的函数为ceil(),,则将整数后面的数据抹除;,则直接将当前整数加一;floor(x)返回的是。ceil(x)返回的是。原创 2023-11-23 17:09:35 · 375 阅读 · 0 评论 -
strcmp函数
(const作用是为了保证不改变数组) strcmp会将两个字符串中的字符一个一个比较直到一方比另一方大或者小(该函数的排列方法是根据对应位置字母按照26字母的顺序来排列)下面就让我们用一串代码来解释一下该函数的使用:(下面举例的函数涉及到qsort函数的使用,如有疑问请看作者前几期有关qsort函数的博客)当碰到字符类数组的排序时,strcmp函数的使用就不得不提到了,下面我们就来介绍该函数的用法。strcmp是字符串函数,使用过程中需要。引用头文件<string.h>原创 2023-11-25 16:49:15 · 81 阅读 · 0 评论 -
C语言const关键字详解
const修饰的变量并不会存放在全局(静态)区,而是取决于它定义的地方,局部定义的就存在栈区,全局定义的就存放在静态区。原创 2023-11-11 13:44:21 · 121 阅读 · 1 评论 -
qsort函数的使用
/计算数组元素个数 40 / 4 = 10。我们在使用冒泡排序法做题的时候,经常会遇到运算次数过多程序超时的情况,而且冒泡排序法只能对整形数组进行排序。看不懂没关系,由于是C初阶,会使用即可。//sizeof(arr[0]) - 数组中每个元素的大小,以字节为单位。//arr - 指向要排序的数组的第一个元素的指针。//sz - 由 arr 指向的数组中元素的个数。//compar - 用来比较两个元素的函数。原创 2023-11-22 22:21:01 · 418 阅读 · 0 评论 -
strtok函数详解
第二步:strtok(NULL,arr2)--------> arr1 "zhangsan\0163\0com" char*s="163" 记录"com"位置。第三步:strtok(NULL,arr2)---------> arr1 "zhangsan\0163\0com" char*s="com"4.strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保留它在字符串中的位置。原创 2023-12-23 11:28:15 · 504 阅读 · 0 评论 -
C语言 strlen与sizeof的区别
这里arr1长度是7而不是6也证明了在计算机中实际存在"\0",只是隐藏了。为了strlen与sizeof更好的编译,最好引用头文件string.h。(不包括字符串末尾的'\0')sizeof是单目操作符,能计算任意类型变量的长度,返回值类型为。strlen是函数,且只能使用来计算字符串的长度,返回值类型为。,并不是变量的实际长度,计算过程中遇到''\0''停止。strlen计算的是向计算机。而sizeof计算的就是。原创 2023-11-25 16:24:41 · 152 阅读 · 0 评论 -
分支与循环语句
do while 循环最大的特点就是无论条件是否成立,先执行循环一次,然后再进行判断,如果条件为真,进入循环,如果条件为假,不进入循环,需要注意的是,do while 循环while之后有分号,这也是其特殊的地方。2.一般来说,for循环是要有完整的初始化,判断和调整部分的,如果省略了判断部分吗,那么程序会进入无限循环,如果漏写了其他部分,也会出现相应的问题,以此初学者在使用时最好把三个部分都要写全写好。******对于单个语句的话,{}是可以不加的,但是对于多条语句的话,{}是一定要使用。原创 2023-10-28 16:58:23 · 25 阅读 · 1 评论 -
二叉树的实现(详解,数据结构)
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。二叉树的存储类似链表,可以由前面的结点找到后面的结点,因此二叉树的销毁也是由后向前销毁会方便很多,所以我们。的知识,就是先将根结点入队,判断队列是否为空,循环将队首元素出队的同时队首元素子节结点入队。根据完全二叉树的定义,具有n个结点的完全二叉树与满二叉树中编号从1~n的结点一一对应。原创 2024-05-04 13:25:44 · 1053 阅读 · 0 评论 -
顺序表和链表的比较(详解)
顺序表和链表都属于线性表,逻辑上是线性结构,但是物理结构上,顺序表物理结构是(内存空间)连续的,而链表不是(内存空间)连续的这样的结构差异就造成了顺序表支持按下标访问元素,而链表就不支持相反链表也有优点,在从头插入元素时,链表会比顺序表方便很多,因为在头插过程中,顺序表需要将后面的元素都向后挪一位,而链表仅需简单插入即可。原创 2024-03-21 16:32:14 · 367 阅读 · 0 评论 -
堆(数据结构)
只要满足以下两个条件,就是堆(Heap)原创 2024-04-19 13:52:31 · 1463 阅读 · 0 评论 -
队列的解释和实现
队列(Queue)是一种特殊的线性数据结构,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以又称为先进先出(FIFO—first in first out)线性表。原创 2024-04-17 10:58:41 · 434 阅读 · 0 评论 -
栈的解释和实现
栈(Stack)是一种遵循后进先出()原则的数据结构。在栈中,元素的添加和移除都发生在同一端,这一端通常被称为栈顶(Top)。栈底(Bottom)是栈的另一端,通常元素不会从栈底添加或移除。原创 2024-04-16 16:21:28 · 436 阅读 · 0 评论 -
atoi函数详解
1、该函数首先会丢弃尽可能多的空白字符,直到找到第一个非空白字符,然后,从这个字符开始,取一个可选的初识加号或者减号,后跟尽可能多的十进制数字,并将他们返回一个int类型的数值。2、若该字符串是在整数的字符后包含其他字符,则这些字符将会被忽略,返回其他字符之前的整数,并且不会对该函数造成任何影响。3、若该字符串中第一个非空字符序列表示有效的整数,或是一个空指针,或只包含空白字符,则不执行任何转换,并且返回零。注意:该函数的返回值为int类型的整数,转换后的值不可超出int可表示的范围。原创 2024-01-26 20:29:25 · 446 阅读 · 0 评论 -
浮点数在内存中存储
对于64位浮点数(双精度浮点数),最高的1位存储符号位S,接着11位存储指数E,剩下的52位存储有效数字M。对于32位浮点数(单精度浮点数),最高的1位存储符号位S,接着8位存储指数E,剩下的23位存储有效数字M。1. (-1)^S表示符号位,当S=0,V为正数,当S=1,V为负数。同理,十进制的-5.0,可以表示为S=1,M=1.01,E=2。那么,根据上面V的格式,可以得出S=0,M=1.01,E=2。2. M表示有效数字,M是大于等于1,小于2的。整数的存储方式和浮点数的存储方式是不一样的。原创 2024-01-26 18:31:16 · 537 阅读 · 0 评论 -
浅谈TopK问题(堆的应用,文件处理,堆排序)
这些排序方法就不适用了,就比如当数据到达10亿时,再使用冒泡排序,它的时间复杂度就相当恐怖了,这时我们就要用到。,如果我们按上述操作对堆顶元素进行替换,那么也只能不断更新这个最大值,我们能使用的方法有很多,就比如比较简单的冒泡排序,他的时间复杂度是。的性质来满足我们的TopK了,这时它的时间复杂度是。在文件data.txt中找出前K个最大的数据。,循环完成后小堆就剩下前K个最大的数据。堆实现思路:(前K个最大的数据)找出最大或最小的前K个数据。找最大建小堆,找最小建大堆。个数据建大小为K的小堆。原创 2024-04-30 17:25:32 · 498 阅读 · 0 评论 -
大小端(C语言)
1.大端(Big-Endian):高地址存放低位2.小端(Little-Endian):高地址存放高位例如:0x11223344在内存中存储。原创 2024-01-26 12:20:48 · 397 阅读 · 0 评论