C语言和简单数据结构
分享C语言相关知识
多米诺骨牌㊫
这个作者很懒,什么都没留下…
展开
-
插入排序算法
1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度: O(N^2)3. 空间复杂度: O(1),它是有一种稳定的排序算法4. 稳定性:稳定。原创 2024-04-08 19:38:35 · 298 阅读 · 0 评论 -
原反补在内存中的应用
负数:原码,反码(原码按位取反),补码(原码按位取反+1)整形提升负数高位补1,正数高位补0;实例中变量只要参加了表达式运算就会发生整形提升。有符号数:符号位+数字大小。正数:原反补码都一样。原创 2023-08-10 10:21:12 · 54 阅读 · 1 评论 -
修饰符 格式说明
md 以宽度为m输出整型数,不足m时,左边补空格。%0md 以宽度m输出整型数,不足m时,左边补零。%m.nf 以宽度为m输出实型小数,小数位为n位。原创 2024-05-22 10:37:01 · 100 阅读 · 0 评论 -
归并排序和计数排序
归并排序(Merge sort)是建立在归并操作上的一种有效的。原创 2024-04-17 10:24:40 · 337 阅读 · 1 评论 -
第一篇博客
我是一个研0小白,在机缘巧合下我与代码结缘。在我看来,计算机编程是一个能让人脑洞大开的世界,在这个世界人人都是创世大能,呼风唤雨,捏土造人无所不能。当然啦,我现在还是游戏开局的那个蛋,距离成为一方妖界至尊还有不小得一段距离,注定这将是一段不平坦的路。大道至简,在编程学习的路途中不求一日千里,但愿走的每一步都走的足够深刻且能够被我所记住。高山流水,细水长流,我计划每天抽出三个小时时间学习编程。但愿最终能够水到渠成。原创 2023-06-11 10:41:15 · 91 阅读 · 1 评论 -
【无标题】
1.讲一下格式化字符串。格式化字符串是指通过特殊的占位符,将对应的信息提取或者整合的特殊字符串。他的占位符包括%d、%f、%c、%s、%x、%p%d 替代的是十进制整数%f 替代的是浮点数(小数),%.2f 是指打印小数点后两位%c 替代的是字符,例如‘A’%s 替代的是字符串 “ writer ”%x 替代的是十六进制整数输出%p 替代的是指针输出getchar 是读入函数的一种,从键盘中读入一个字符,返回为int 类型。putchar 将键盘中读入的字符打印出来。原创 2023-07-04 14:59:35 · 33 阅读 · 0 评论 -
三子棋小游戏
printf("请重新输入(ROW,COL):");printf("请输入落子坐标(ROW,COL):");printf("你真菜,竟然和电脑五五开!printf("您的输入有误!printf("你真菜,连电脑都下不过!printf("电脑落子:\n");printf("恭喜你,赢了!printf("欢迎来到三子棋游戏\n");printf("请输入您的选择:");//检查游戏是否结束。//检查游戏是否结束。原创 2023-07-20 21:53:01 · 42 阅读 · 1 评论 -
选择排序与堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。1.1 基本思想:选择排序是通过遍历数组,不断找出数组的最大值和最小值放到两端,直到排序结束。1.时间复杂度:O(0.5*N^2)时间复杂度:O(N*logN)2.空间复杂度:O(1)空间复杂度:O(1)原创 2024-04-12 16:06:14 · 206 阅读 · 0 评论 -
扫雷小游戏
【代码】扫雷小游戏。原创 2023-08-13 17:56:52 · 42 阅读 · 1 评论 -
输入输出函数补充
printf函数在占位符前面加0,可以实现空白部分自动补零的功能。scanf函数的占位符前面加个数字可以限定几位。原创 2023-07-07 15:08:51 · 48 阅读 · 0 评论 -
交换排序(冒泡和快排)
交换排序:基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。冒泡排序:基本思想:通过相邻数字两两交换来找出最大(最小)的数字放到合适的位置上。快速排序的单趟排序是以一个数作为基准值,实现将数组中比基准数小的数放在基准值的左侧,比基准值大的数放在基准值的右侧。原创 2024-04-13 13:03:34 · 227 阅读 · 0 评论 -
随机链表的复制
思路:在每个节点后面复制一个相同的节点,然后再将复制的节点拆除下来连成一个新的链表。原创 2024-03-13 14:41:49 · 366 阅读 · 0 评论 -
有关柔性数组
所以,如果我们把结构体的内存及其他成员的内训一次行分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁,但是被static修饰的变量存放在数据段(静态区),数据段的特点是在上面创建的变量直到程序结束才被销毁。包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。4、代码段:存放函数体(类成员函数和全局函数)的二进制代码。原创 2023-10-15 10:05:20 · 39 阅读 · 1 评论 -
自定义类型:结构体,枚举,联合
结构体变量声明后,可以在声明末尾定义或者在声明外面定义,很简单可以不看枚举的定义中包括枚举类型和枚举常量的设定enum Sex//枚举常量MALE,FEMALE,SECRET,enum ColorRED,GREEN,BLUE,return 0;联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合体也叫共用体)。int i;原创 2023-10-04 21:54:33 · 52 阅读 · 3 评论 -
栈和队列的概念
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。栈:一种特殊的线性表,其只允许在固定一端进行插入和删除元素操作。栈中的数据元素遵守后进先出的原则。队列也可以数组和链表的结构实现,使用链表结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈的是实现一般可以使用数组或者链表实现,相对而言数组的结构更优一些。压栈:栈的插入操作叫做进栈\入栈,入数据在栈顶。原创 2024-01-21 10:36:21 · 353 阅读 · 0 评论 -
逆置链表的两种
第二种:是头插的方法。将所有的节点一个一个头差到空指针上,这儿的重点是刷新头插后的头newhead比较重要。指针n1和n2用来逆置指针的方向,n3用来指明方向。第一种:用三个指针来你逆置。原创 2024-03-06 20:44:45 · 350 阅读 · 1 评论 -
C语言文件操作
文件资源申请类似于动态内存申请,每个被使用的文件都在内存中开辟了一个相应的文件信息去,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束。文件在读写之前应该先打开文件,在使用文件结束之后应该关闭文件。一个文件要有一个唯一的文件标识,以便用户识别和引用。根据文件指针的位置和偏移量来定位文件指针。让文件指针的位置回到文件的起始位置。原创 2023-10-24 14:25:25 · 40 阅读 · 0 评论 -
字符串和内存函数
定义:结构是一些值的集合,这些值成为成员变量。结构的每个成员可以是不同类型的变量。结构体的自引用:结构体中不能包含同类型的结构体变量,但是可以包含同类型结构体指针。offsetof 可以计算结构体成员相较于起始位置的偏移量。书:书名+作者+出版社+......类似数组:一组相同类型元素的变量。内存相关的函数(单字节处理)人:名字+年龄+身高+体重。C语言支持的自定义类型。原创 2023-10-03 14:55:52 · 47 阅读 · 2 评论 -
数据在内存中的存储
字符在内存中的存储的是字符的ASCII码值,ASCII码值是整形,所以字符类型归类到整形家族。如果是有符号数,能存储的范围是:-127~128。整形:字符类型,短整型,整形,长整型,长长整形。规则:整型提升是按照变量的类型来进行提升的。C语言中,表达式中的字符和短整型操作数在。b.如果是有符号数,则高位全补符号位;的时候会发生整型提升,变为普通整型。a.如果是无符号数,则高位直接补0;浮点型:单精度浮点数,双精度浮点数。char 占1个字节=8个bit。原创 2023-08-21 16:58:32 · 43 阅读 · 1 评论 -
顺序表和链表
线性表:是n个具有相同特性的数据元素的有限数列。线性表在逻辑上是线性结构的,也就说是连续的一条直线。但在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元一次存储数据元素的线性结构,一般情况下采取数组存储。链表的每个单元是一个结构体,要想将两个结构体连接在一块,只需要将第二个结构体的地址存入第一个结构体中的指针中。链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。(物理结构上是不连续的)原创 2023-12-12 16:55:04 · 42 阅读 · 0 评论 -
二叉树相关概念
通常的方法是链表中每个节点由三个域组成,数据域和左右指针域,左右指针分别用来给出该节点左孩子和右孩子所在的链节点的存储地址。对于深度为K的,有n个结点的二叉树,当且仅当每个结点都与深度为K的满二叉树结点一一对应时,称为完全二叉树。* 除根节点外,其余节点被分成M个互不相交的集合,其中每一个集合又是一颗结构与树类似的子树。1.满二叉树:一个二叉树,如果每一层的节点树都达到最大值,则这个二叉树就是满二叉树。节点的祖先:从根到该节点所经分支上的所有节点。子孙:以某节点为根的子树中任一节点都称为该节点的子孙。原创 2024-03-12 21:54:17 · 849 阅读 · 1 评论 -
空间复杂度
空间复杂度:是对一个算法在运行过程中临时占用存储空间大小的量度。例3:递归调用了N次,开辟了N个函数栈帧,空间复杂度为O(N)例2:动态内存开辟了N+1个额外空间,空间复杂度是O(N)例1:定义了常数个额外空间,空间复杂度为O(1)原创 2023-11-07 17:23:01 · 42 阅读 · 0 评论 -
时间复杂度
例5:这个函数有一个int参数,后面的没有显示,最好的情况是执行了1次,最坏的情况是执行了N的常数倍次,时间复杂度是O(N)。例6:冒泡排序的基本操作在最坏的情况下执行了N*N次,时间复杂度是O(N2)例1:这个函数的基础操作是循环,执行力2*N+10次,时间复杂度是O(N)例8:这个函数的基本操作是递归,大概递归2^N次,时间复杂度是O(2^N)例2:这个函数的基本操作执行了M+N次,时间复杂度是O(N+M)1.2 在修改后的运行次数函数中,只保留最高阶项。例9:阶乘的递归了N次,时间复杂度是O(N)原创 2023-11-07 16:54:22 · 33 阅读 · 0 评论