自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 传参的指针,你的值到底变了没?!(有关函数形参修改的另类案例)

其实问题的本质是简单的,当你在函数中进行交换的时候,你只是在函数内部对函数的p和q变量进行了交换地址,而&a,&b本质上不是变量(即没有用一个新的变量名来对他们进行存储)而是一个值,所以无论怎样交换,只要你从函数中出来,a和b这两个变量还在,当你写&a,&b的时候,可以理解为又一次的对a和b进行取地址操作,他们俩的地址就不会改变,输出的值也不会改变。原因在于不同的函数在不同的空间上,函数的生命周期随着函数的调用而结束,因此在函数内部进行的值操作是不会对函数外的变量产生影响的。,其实是一条普适性的原理。

2024-03-31 11:54:50 251

原创 赋值语句还能当判断条件?涨芝士了!

赋值和条件看似是C语言中毫不相关的两个概念,虽然实际过程中我猜测不会有太多这种不太符合常理的情况出现,但是现在在学习的过程中,为了出题而出题总是会整出一些花活出来.....这很难不让人联想起高中时一些大佬为了彰显自己的数学天赋而自己手动捏造出一些奇了吧怪的导数题来恶心人,俗称钓鱼卷......不过不管怎样,特算是补起了自己的一个知识盲区,一起来看看吧~这显然是一个赋值语句,可是按理来说应该是一个条件判断语句的,然而程序也是正确的,只能说明这个赋值语句是可以当作有真值的语句的。

2024-03-31 11:01:15 232 1

原创 数据结构作业整理:扩展字符

【问题描述】从键盘输入包含扩展符'-'的字符串,将其扩展为等价的完整字符,例如将a-d扩展为abcd,并输出扩展后的字符串。要求:只处理[a-z]、[A-Z]、[0-9]范围内的字符扩展,即只有当扩展符前后的字符同时是小写字母、大写字母或数字,并且扩展符后的字符大于扩展符前的字符时才进行扩展,其它情况不进行扩展,原样输出。例如:a-R、D-e、0-b、4-B等字符串都不进行扩展。【输入形式】从键盘输入包含扩展符的字符串【输出形式】输出扩展后的字符串【输入样例1】

2024-03-26 00:42:36 573

原创 数据结构作业复盘2:结构体&指针的小问题

数据结构第二次的作业的内容还是指针和结构体为主,有很多小细节想和大家分享。

2024-03-19 00:03:24 507 1

原创 C语言笔记:文件的操作&&各种文件函数讲解

突然发现自己的C语言文件部分还没有学,赶紧来补一下~~

2024-03-09 22:54:36 938

原创 数据结构作业复盘1:字符串疑难杂症小汇总(字符串赋值,指针数组...)

这种方法不会给字符串末尾加上‘\0’。如果字符串长度等于数组所声明的长度,他是不会加上‘\0’的。字符串长度小于数组所声明的长度,会把还未初始化的元素自动变成‘\0’,也就是说后面五个元素全部都是'\0'。一开始没有声明数组长度,进行赋值以后,会在后面加上'\0'。对比1,我试了一下,打印sizeof(s)的话,第一种是5,而第三种是6,这说明第三种方法后面有‘\0’而第一种没有。这种方法相当于一个字符一个字符的赋值,所以也不会加上‘\0’.和前面的3类似,后面五个会被初始化为‘\0’。

2024-03-03 20:53:30 1159

原创 leetcode刷题日记:LCR 142. 训练计划 IV,876. 链表的中间结点

今天的两道题涉及到的知识点是双指针以及合并链表的一些技巧(我是使用的迭代法的,看了题解之后才搞明白,希望能给大家讲清楚)

2024-02-29 00:36:35 1125 1

原创 leetcode刷题日记&总结:LCR 024. 反转链表,LCR 140. 训练计划 II,面试题 02.03. 删除中间节点

今天刷了三道题,涉及的知识点是反转链表,双指针的应用,以及一种新型删除链表节点的注意事项。

2024-02-27 22:46:10 1036

原创 数据结构:树与二叉树Part2:创建与遍历(未完待续!C语言实现)

下面就来介绍一下二叉树的数学性质,二叉树的创建,二叉树的遍历。

2024-02-23 23:19:24 1005 1

原创 函数递归解决n个结点可构成的二叉树数目问题(卡塔兰数)

看到这样一个问题,问n个结点可以组成多少个二叉树,正好自己在学,顺便写了一个函数来解决这个问题,然后一搜发现这个竟然是卡特兰数,好神奇~~~

2024-02-22 10:22:48 394 1

原创 数据结构:树与二叉树Part1:基本概念,树的转换(C语言实现)

树,顾名思义,形状就是一个树的样子,有很多分叉,自我感觉是一个有多个分叉的链表。树的结构以及基本概念还是比较复杂,不像前面的数据结构,所以wo请大家耐心看完基础概念。

2024-02-21 12:03:37 1056 2

原创 数据结构:队列(C语言实现)&一些个人总结

今天终于是把队列的基本操作学完了,队列和栈其实大同小异,队列遵循的是先进先出原则,而栈遵循的是先进后出原则,形象的来说,栈是一个杯子,而队列是一个水管,谁先进队自然就会先流出来。

2024-02-19 17:00:46 1083 1

原创 刷题笔记2.16—力扣LCR 123. 图书整理 I(链表反转),关于设置另外指针的重要性

我的思路是这样的,首先遍历一遍链表,获取数组长度,然后再遍历一次,倒序将数据存储进入数组之中,其实思路很简单,但是我一开始的时候在获取链表长度的时候直接拿head指针作为变化指针的,这样就会导致后面再去做取用每个节点中的值的时候出现错误,因此必须拿一个current指针作为记录长度的指针。这是我第一次了解双指针相关的思路,其实在处理链表相关的题目时,为了保证每个节点的指针不会变化,需要另外的指针来操作,算是一个经验吧,希望对大家有用。

2024-02-16 22:24:46 344 1

原创 数据结构:栈(C语言实现)

int data;//我这里以整型变量作为整个栈的元素类型//这是指向下一个节点的指针//这是整个站的头结点,也是栈顶,命名为top更好理解一些int size;//栈的大小}stack;

2024-02-16 11:41:30 546 1

原创 数据结构:链表(小操作,销毁,查找,修改,C语言实现)新春快乐!!

正值新春佳节,在此祝大家新春快乐,龙行龘龘,万事顺意~~~所以让我看看是谁大年初一还在卷数据结构捏~~最后给链表收个尾,这些小操作好像不是那么难了,所以就不做图了,直接上代码首先是查找,分根据节点里面的值进行查找和根据下表进行查找,都是返回节点。

2024-02-10 10:25:46 444 1

原创 数据结构:链表(删除,C语言实现)

这里的current相当于是要被删除的节点的前驱的地址,current->next相当于是待删除节点的地址,current->next->next相当于是待删除节点的后继的地址,我们要做的首先是把待删除节点(也就是NODE index)的内存给释放掉,然后把之前已经存储在next变量中的current->next->next赋值给current->next,也就是把前驱和后继连接起来,这样就好了。注意,由于要释放内存,因此要先把后继的地址current->next->next存储到新的变量里面再进行操作。

2024-02-08 18:29:31 492

原创 数据结构:链表(插入)

这样我们就完整地完成了一次元素插入,这是对于0而言,那么对于其他元素而言,我们需要做只是先去创建一个操作指针current作为现在到达的节点的位置(为什么不直接用head作为操作指针呢,因为这是链表,内存是不连续的,head指针的加与减不能够到达后面节点的地址),采用类似递归的方式,current=current->next,从而实现不断把current指针前移的目标,剩下与0的情况类似。不能先改动head指针。对于插入一个元素的操作,我们得先指定相应的下标index,它的位置如下。

2024-02-07 22:26:53 480 1

原创 数据结构:链表(创建与初始化,C语言实现)

链表是顺序表的升级版,它的存储空间是不连续,因此在进行删除,插入操作的时候,不需要像顺序表一样把后面的所有元素进行前移覆盖,因此更加方便,下面我们首先用代码来创建一个链表。一个结构体的节点由它存储的内容以及一个指向下一个结点的指针组成,可以把整个链表理解为一个打了很多结的绳子,一个节点由一个绳结和两段绳结之间的绳子组成,绳结就是数据域,即存储的数据内容,中间的绳子就是指针,连接两个不同的节点。

2024-02-05 21:37:25 533

原创 结构体笔记(结构体嵌套)

这里我们直接在结构体A中嵌套了一个结构体B,并且直接声明了一个名字为variable的变量(struct B 是类型,variable是变量名称)那么我们对这个结构体进行一个测试,看一下作为嵌套在内部的结构体B能否继续用它来创建一个新的变量,给他们里面的数据进行赋值初始化。编译没有出现问题说明这样是可以的,也就是说嵌套在里面的结构体可以继续重新定义新的变量。上面是将成绩数据作为一个结构体封装,嵌套在学生信息这个数据结构体之中,注意嵌套在里面的结构体一定要在外层的结构体之前。1.嵌套方式一(先声明再嵌套)

2024-02-02 16:30:05 507

原创 判断复杂指针类型的个人经验

上面的那个是一个指针数组,下面的pp是p的地址,我一直记得指针的类型是所指向的类型加上*,去掉变量名就是指针的类型了,但是按这个道理,p的类型是char*[3],pp的类型是char*(*)[3]所以碰到复杂的指针的时候不妨去使用%d之类的来输出,看看编译的warning是什么就好了。于是我干脆输出的时候选择了根本不可能的类型,只去编译,是这样的warning。复杂的指针往往让人不知道是个什么东西,写多了会迷糊,所以我想了个这样的法子。终于发现原来p是一个二级指针,这就解答了之前的疑惑。

2024-01-30 23:54:20 497

原创 有关指针能否修改问题的思考

3.指针的本质是地址,对于字符串而言,即使是常量字符串,指针储存的是其首地址,当再次赋值的时候,字符串常量在赋值的时候可以理解为其首地址,因此再次改变的时候不会出现问题。4.对指针而言,作为地址是不受其所指向的内容所影响的,而想要改变内容需要视内容的数据类型而定。1.指针如果指向常量,那么不能修改其内容,因为常量在静态区,而指针作为变量在栈区。2.指针如果指向变量,由于变量的内存是可以修改的,那么指针指向的内容是可以修改的。这个代码可能会有很多人认为是错误的,但其实是正确的,str被修改掉了。

2024-01-30 12:38:27 471 1

空空如也

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

TA关注的人

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