自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【排序算法】——快速排序

当数组中含有大量相同数据时,我们实现的递归还是会退化,有了前面双指针算法的思想,可以衍生出另一个算法:三指针;双指针算法只是将区域分化成两部分:≤keyi、>keyi,但是如果再进一步划分区域:将=keyi的区域单独划分,那么快排的算法效率就会得到显著上升:算法思想:pleft:标记左区间,处理最后一个<keyi的位置pright:标记右区间,处理第一个>keyi的位置pcur:遍历整个数组如图:处理时的行为:

2025-03-20 20:59:10 789

原创 C语言:编译和链接

当点击test.i的文件中,可以浏览到实际写的代码在1000行才开始执行,前面也有很多的代码信息,但是在实际编写的代码中,处理包含头文件以外并没有其他的代码增加,也就是说上面的信息都是来自于头文件的包含。来完成语义分析,即对表达式的语法层面分析,编译器所能做的分析是语义的静态分析,静态分析通常包括声明和类型的匹配,类型的转换,这个阶段会报告错误的语法信息。将源代码程序被输入扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成一系列的记号(关键字、标识符、字面量、特殊字符等)

2025-02-10 11:44:44 947

原创 vs code配置C语言代码的开发环境

并非是编译器,所以在编写代码的时候用它运行代码需要配置编译器,这里我们已经安装好了mingw64在C盘的根目录底下(注意:对于mingw的下载路径最好是放在好找的根目录底下,这样使用起来非常方便)通过上述的编译过程会发现一个问题:就是每次的生成只能生成当下文件的对应文件,但是有时候我们要对一个工程分模块化处理(一个文件中有多个.c文件),那么这里就需要更改执行任务文件,更改其中的一些代码。执行代码需要按快捷键:ctrl + `(esc下面的键),输入命令:.\ + 生成的文件名。

2025-02-08 21:41:08 1411

原创 C语言:动态内存管理

malloc就是可以向系统申请空间的函数,申请失败会返回NULL<1.返回值为void*表面函数可以接收任意类型,因为在实际使用过程中每一次调用malloc可能会使用不同类型的数据,所以它的返回值就不能写死;size:要申请的数据个数,单位是字节<2.malloc函数需要包含的头文件:<stdlib.h>int main()int* pi;//申请10个int大小的空间//注意需要强制类型转化//判定pi如果申请失败的情况,直接返回");

2025-02-06 11:23:38 614

原创 C语言:函数栈帧的创建和销毁

在写C语言代码的时候,我们经常会把一个独立的功能抽象成函数,C程序是以函数为基本单位的,那么函数又是如何调用的呢?函数的参数是怎样传递的呢?这些答案都可以在函数栈帧中寻找函数参数和函数返回值临时变量(包括函数的非静态的局部变量以及编译器自动产生的其他临时变量)保存上下文信息(包括用来维护函数调用前后的寄存器)栈(stack)是现代计算机程序中最为重要的概念之一,几乎每一个程序都要用到栈,没有栈就没有函数,没有局部变量,更没有更正语言的桥接。

2025-02-04 22:31:34 802

原创 C语言:文件操作

磁盘(硬盘)上的文件就是文件,但是在程序文件中,一般谈到的文件有两种:程序文件、数据文件(从文件功能的角度进行分类)计算机中的路径常分为相对路径和绝对路径,相对路径是在当前位置及其上级位置,绝对路径是从根上开始写实例:当前没有创建文件,但以写的方式打开文件会新创建一个文件在当前位置运行后:新创建了一个文件并且里面含有hello,通过fputs的操作<1.用相对路径打开文件:<2.绝对路径打开文件注意:按照路径来操作,用\、//都可以函数名功能适用于fgetc字符输入函数。

2025-02-03 14:37:54 755

原创 解决vs中使用scanf函数报错的情况

的命令,这个错误信息是只有在vs上才有的,如果仅仅按照第一种方式直接进行处理那么代码的可移植性就不好了,所以选择命令的方法,命令应是放在第一行上的,但是这里又出现了一个问题:如果在后续我们要频繁地使用scanf函数,那么每次都要在写代码的文件的第一行手动加上这个命令吗?会发现这里输入的字符串的长度已经超过了给定的长度,但是scanf函数仍然进行读取操作,这里就说明scanf函数不管你输入什么样的长度的值都会进行读取,就会造成对数组内存的非法访问,已经有越界的行为了,所以scanf函数是不安全的。

2025-01-29 23:10:43 375

原创 链表算法专题1:环形链表的判断及延申

这里的思路就是运用快慢双指针来判断是否相遇即可,所谓的快慢双指针就是让两个指针通过走的步数不同来构造一个追赶的情景,借助循环就可以达到,循环的条件为快指针是否到达末尾,对于环形链表一定会相遇(至于为什么待会会证明),而对于不成环的链表永远也不可能相遇,比较快指针会先慢指针到达链表的末端。这里如果再深究一下,如果快指针每次走三步,慢指针还是每次走一步那么它们还会在环内相遇吗?2.延申(如果是环形链表----返回环形链表的第一个入口的结点)1.3.2用三步的快指针代码解决环形链表的判断。1.3走三步的快指针。

2025-01-16 16:17:09 910

原创 C语言之自定义类型:结构体

在实际应用中,首选的是第二个,上述两种方式的差别在于函数的形参调用,分别是:传值调用、传址调用,而初始创建的结构体类型的成员有一个很大的数据,如果是传值的话,函数传参的时候是要压栈的,会有时间和空间上的开销,如果一个结构体对象过大时比如当前例子下,参数压栈的系统开销是非常大的,会造成一定的性能下降,而传址会直接找到参数的地址调用,并不会有太大的开销,所以建议:结构体传参的时候,要传结构体的地址。编译器会把两个不同的声明当作完全不同的两个类型,这是非法的,这就注定了匿名结构体类型只能使用一次!

2025-01-08 23:04:11 1016

原创 双指针算法专题----盛最多水的容器

题目中所陈述的就是要得到一个最大的返回值,等于任意两个元素的最小值乘这两个元素的下标差,在这里暴力解法就是把全部的两个元素都遍历一遍然后不断更新最大值,但是此时会超时,而且已经给予了我们一个函数表达式,那我们就可以从它入手。这里灵活运用了表达式的单调性,只用遍历一遍即可返回最大值,实际思考中,可以采取控制变量的方法进行大胆假设,或者从另外一个变量出发,可能会优化不少。

2025-01-03 23:10:52 119

原创 双指针算法专题----和为s的两个数字

注意题目给定的数组是升序的,它要求返回和为目标值的两个元素,本体用暴力解法只需要用两层for循环即可,但直接使用暴力解法提交代码会造成超时的提醒,并且数组本身就是升序排列的,如果要都遍历有点划不来,可以借用单调性来优化算法--->双指针。借助双指针,只需遍历一遍数组就可以达到效果,这都得益于数组本身的特性---单调性。

2025-01-02 20:25:13 209

原创 双指针算法专题----快乐数以及内部成环条件判断

根据是快乐数所画出来的图可以看得出这个结构与链表非常相似,那么这时候就可以使用双指针算法,将数和算出来的数当作指针,借用成环的结构,那就可以构造出两个快慢指针相追的场景.所以,经过F操作的数无论如何都会成环,就不存在一直算下去不成环的情况,只是框定数的最大范围不同,所执行的F操作的次数不同罢了。2.借助循环构造追赶的操作,快指针走两步(执行两次F操作),慢指针走一步(执行一次F操作)1.定义快慢双指针,初始值:慢指针为给定数,快指针为给定数执行一次F的数。记每次计算数的每一位的平方和的操作为F。

2024-12-31 07:23:54 215

原创 双指针算法专题----复写零

这里,我们重新开辟了一块新的数组,并通过判断cur下标的元素来决定新数组的操作是复写一遍零还是直接抄过来,但是题目要求就地更改,这个时候我们又想能否通过这两个下标遍历完一遍数组就可以达到想要的效果?我们可以换种思路,从后向前复写,这样子就能达到最终的效果了,至此我们就可以写出解法二了。题目给定了指定函数也就是只需要完成该函数的实现功能即可,而题目的难点就在于不能重新开辟一个新的数组,只能就地操作,虽然暴力解法不能通过题目,但是却给予了一定的方向,所以我还是编写出来了。会发现出现了错误,这是为什么呢?

2024-12-28 00:16:19 182

原创 数据在内存中的存储(整数、浮点数)

数据在内存中的存储

2024-11-16 23:58:33 717

原创 C语言四种变量交换的方法

变量交换

2024-11-04 20:40:17 250

原创 C语言的数据类型和变量

在前面我们算过一个int类型的长度是4个字节,也就是32个比特位,而计算机内部是以二进制储存的,而对于无符号整型来说:它可以不需要额外的用一个比特位来表示符号(在有符号整型里面,需要用一位来表示符号,因为要区别正负数,二进制序列中,最高的一位是被当作符号的,剩余的都是数值,而符号位用0表示“正”,用1表示“负”),也就说无符号整型的存储范围会比有符号整型的要大一倍,同样等同的内存,表示最大的整数可以更大,这就是无符号关键字声明的优点。%()在括号中指定一组匹配的字符,遇到不在集合的字符,匹配将会停止;

2024-11-02 19:24:34 1753

原创 C语言:数组

而如果我们要访问数组里面的元素就需要用到这个下标,C语言提供了一个操作符[ ],下标操作符,而有了这个符号,我们就可以轻易地访问或者使用数组里面的元素了,例如:如果我们想要访问上面的元素3,就找arr[2]就行,值得注意的是:arr[x]表示的是下标为x的元素,并非arr整个数组,而其中arr被称为数组名。type所指的就是这个数组的类型(就是你所要在这个数组里面存放什么类型的元素),而arr_name是你所创建的数组名称,[ ]中表示常量值,以表示你需要存放的元素个数,也可以省略,只给定元素。

2024-10-22 16:13:55 1280

原创 C语言的常见概念

原因就是因为单单打印字符组成的集合,你是没有标注\0这个字符的,在你内存内部可能在某个地方会有\0的存在,而机器编译的时候它只认\0这个结束的标记,所以它在打印的时候,还会继续往后面走,直到遇到\0为止,所以结束的标记非常重要,它可以更好地帮助我们掌控机器达到我们想要的结果,这样才能服务于我们。对于一段好的代码,能看得懂其中的运行含义是非常重要的,而且编程的良好习惯也正是国内教育所缺少的,我们要尽可能地使代码更加地可视化,当然:注释也应该适当,标注在关键的地方可以让读者更加清晰,也不能过于繁琐。

2024-10-16 23:08:37 1341

原创 对于未来编程的展望

我目前是一位福建的学生,早在之前不久我就对未来科技的趋势有自己的看法和见解,我认为在现在各项技术的不断发展和日益便捷,编程语言是一项必不可少的工具,学习这门语言或是说学习这门课程,相当于换一个新的逻辑处理一些事,这对于我们的素质培养和角度见解有了更宽阔的道路,对于相同定向目标的解决方法,其中所存在的途径是千变万化的,相较于之前高中三年的古板的应试教育,全新的社会给我们提供了更宽阔的视野,到了大学生活中,我们所需要的手段与以前的教学有了天差地别的区分,更要敢想,敢做!

2024-10-07 16:54:42 288

空空如也

空空如也

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

TA关注的人

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