- 博客(57)
- 收藏
- 关注
原创 C++三大特征:多态
重载:函数名相同:参数列表不同复写(覆盖) :两个函数分别在基类和派生类,函数名/参数/返回值必须相同,两个函数都必须是虚函数重定义(隐藏) :两个函数分别在基类和派生类中,函数名相同,两个基类和派生类不构成重写就是重定义。
2024-07-12 00:34:49
686
原创 力扣双指针算法题目:快乐数
由图可知,这是一个有环链表,说起链表问题,在判断一个链表是否有环的时候,我们常用的思想就是快慢指针思想,通常来讲就是有两个指针slow和fast,slow初始化在第一个位置,fast初始化在第二个位置,slow一次走一格,fast一次走两格,如果slow指针可以和fast指针相遇,那么就说明这个链表是有环的。如何让快指针dfast每次推进两个格子,我们只要将fast目前所代表的数字调用一下bitsum得到它后面的一个数字,再让它后面的一格数字再次调用一下bitsum就可以了,这便是如下的代码。
2024-07-07 22:18:08
417
原创 力扣双指针算法题目:二叉树的层序遍历(BFS)
综上所述首先要进行的循环(需要被重复操作的步骤)是要判断q是否为空,这个while循环所需要循环的次数是直到整个二叉树节点全部都被层序遍历遍历完毕为止。因为二叉树第二层的节点就是第一层节点的子节点,所以这个时候我们只要使用第一层节点的指针域检索到第二层节点并且放入队q。紧接着第二个需要进行的循环便是对每个节点进行弹出q,再将其数据入v,最后将其子节点入q操作。接着,对二叉树的第二层进行遍历,先将第一层的节点从队列q中探出,然后将其数据放入数组v。经过这一步的操作,我们便完成了二叉树第一层的遍历。
2024-07-06 23:51:03
406
1
原创 力扣双指针算法题目:复写零
本题要求就是对于一个数组顺序表,将表中的所有“0”元素都向后再写一遍,且我们还要保证此元素之后的元素不受到影响,且复写零之后此数组顺序表的总长度不可以改变,所以溢出的元素直接忽略即可、空出此被复写的元素所需要的空间,然后对这个被空出来的空间填入0,或者将被复写的元素复制粘贴进去。所以我给出的思路就是将0元素之后的所有元素都向后移动一格,
2024-07-05 20:53:36
351
原创 双指针算法:快速排序模拟实现
/我们的目的是在一轮循环中用cur将nums全部遍历一遍,将比key小的数字全部移动到key左,是key成为分界节点。所以要将key和pre的指针和数据交换以达到”以key为分界点,key左边的数据整体比右边小“//如果cur遍历到一串连续<key的数据,那么可将这一串数据整合视为一类东西(都小于key)一轮循环结束时,以pre为分界点,除去key,pre左边的数字整体比右边小。2:但当cur>key时,cur继续向后遍历,直至cur<key才会停下。指针cur用于检测符合条件的数据。
2024-07-04 21:59:37
239
原创 力扣双指针算法题目:移动零
cur遇到零之后,des就不走,但是cur要接着走,此时cur指向零,des指向cur之前一个非0元素。在下一个循环中,cur不指向0,cur和des同时向前走一格,此时des指向零,cur不指向零。在非零区段中,des和cur一定是紧挨着的且cur一定比des快(cur在des右边)这个题目的思路和“使用递归排序快速排序解决数组的排序问题”相同。指针des和cur向右遍历。使用双指针des和cur。
2024-07-03 14:58:25
322
原创 力扣双指针算法题目:双数之和,三数之和,四数之和
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使他们的和正好是s,如果有多对数字的和是s,则输出一对即可。
2024-07-02 14:38:16
805
原创 C++例题:大数运算---字符串相加(使用数字字符串来模拟竖式计算)
这两个数字字符串的相加可以,首元素的下标为0,当end1和end2>=0时此循环才可以进行,在进行加法计算的过程中结果的x=x1+x2+next;在将它的每个位置取下后将需要保留的位置依次放入字符串中形成新的数字,有两种方法,可以尾插然后使用reverse()倒一下,或者直接头插。结合手绘图,我们可以得出结论,在进行竖式计算的过程中,一个数字的得出其实由三个部分的相加组成,是x1+x2+next。以竖式计算的逻辑,绝对是从个位开始相加,即'9'+'9',于是,我们便要想办法定位到这个位子,
2024-05-06 19:43:31
427
原创 二叉树的递归详解:以例题计算二叉树第k层为例
的调用,在每次调用这个函数并且开辟栈帧对每一个节点的left子树进行遍历的时候,return的值会被返回给int rightk然后在每一个父节点的栈帧中,使用return lefk+rightk对它的左右子树进行节点个数的相加,然后依靠return再返回给上一个栈帧的leftk或者rightk,用这个思路最后可以得出第k层的节点个数。后,会进行一下函数的调用,根据函数的栈帧的相关知识,函数在调用的同时候会开辟新的栈帧,并接着在当前开辟的栈帧中运行,与此同时,k也会减去1,在此代码。在运行的过程中,先碰到。
2024-05-03 21:22:10
347
原创 C++类和对象(下)
初始化列表是对成员变量进行初始化操作的变量初始化列表一般写在构造函数里面,如上图MyQueue类中的构造函数MyQueue,初始列表以分号为起点,用逗号作为变量的分隔符,_pushst,_popst都是构造函数的成员变量用括号进行赋值操作.
2024-04-22 11:07:03
269
原创 C++类和对象(中)
默认成员函数:即程序员未显式实现,但是编译器会自动生成(半自动化)1.1初始化和清理:one:构造函数负责初始化(Init) two:析构函数负责清理(Destroy)工作1.2拷贝和复制:one:拷贝函数使用同类对象初始化创建对象 two:赋值重载主要是把一个对象赋值给另一个对象1.3取地址重载 one:主要是普通对象和const对象取地址,这两个极少情况下会自己实现。
2024-04-09 18:41:36
436
原创 C++入门(2)
宏函数(Macro Function)在编程中通常指的是使用预处理器(preprocessor)定义的函数式宏(function-like macros)。在C和C++等语言中,预处理器在编译过程的早期阶段工作,它会处理源代码中的宏定义和替换。
2024-04-07 13:27:31
456
原创 C++类入门:命名域,函数重载
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。基本格式: namespace+自定义命名空间变量名称定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。
2024-03-30 16:40:29
380
1
原创 循环队列:一道使数据结构萌新知道什么是“愁滋味“的题目
这破题目肝了我一天半才搞明白,也正是因为这道题目,我才豁然明白了李煜所说的"剪不断,理还乱...别是一般滋味在心头"到底是什么"滋味".在完全搞明白之前,真的是放有放不下,理也理不清...但是理解之后你会发现,嘛い---,也就那么个回事嘛O(∩_∩)O。
2024-03-05 19:38:33
881
1
原创 c语言的数据结构:队列
无论是栈,队列,抑或是树,它们基本都是由顺序表,链表这些基本的元素构成的,并且人们将栈,队列等一些数据结构发明出来也是为了根据人类的需求解决人类的一些问题,举一个例子,医院叫号排队,为了防止有些人乱插队从而引起的不必要的纠纷,于是以数据结构队列为基本原理开发出有关排队就医的系统。设置两个结点指针phead和ptail,例如我们每次进行一次尾插操作,就让ptail指向新的尾结点,如此一来,ptail便一直指向尾结点,每当我们需要取去寻找尾结点是,可以直接使用ptail,就不需要再去从头开始遍历了.
2024-03-01 09:54:32
946
1
原创 c语言的数据结构:找环状链表入口处
思路:设定两个快慢指针fast和slow,fast每次走两个结点,slow每次走一个节点如果fast指针遇到了Null,那么这个链表没有环,如果fast和slow可以相遇,则代表这个链表有环代码如下N:fast先进环,slow后进环,fast和slow之间的距离是NN--->偶数--->奇数追上了 过了,进入下一个循环(fast超过slow1个结点了)C:圆环的周长slow和fast之距变为c-1c-1是偶数,下一轮便追上了c-1是奇数,那么永远也追不上。
2024-02-23 14:15:25
660
2
原创 c语言数据结构:顺序表(增,删,查,改)
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。 顺序表的底层结构是数组,对数组的封装,实现了常用的增删改查等接口所以可以这么说,顺序表的本质就是一个数组.静态顺序表因为不常用,这里便不进行介绍了,感兴趣的可自行去了解重点是动态顺序表举个例子来更好的了解
2024-01-19 00:28:07
868
原创 EP16:文件操作(c语言).fopen,fclose,fputc,fgetc,fputs,fgets,fprintf,fscanf,fwrite,fread函数作用
流:指的是程序与外部设备交换信息的媒介,可以理解为信使外部设备:屏幕,文件,网络等.
2023-12-12 18:26:02
938
原创 EP15:动态内存管理概述(c语言)malloc,calloc,realloc函数的介绍使用及柔性数组的介绍
C语言中的动态内存是指在程序运行时,根据需要动态地分配内存空间的一种内存管理方式。与静态内存相比,动态内存的大小和生命周期都可以在程序运行时动态地确定和调整,因此更加灵活。C语言中提供了四个函数:malloc、calloc、realloc和free,用于动态地分配和释放内存空间。其中,malloc和calloc用于分配内存空间,realloc用于调整已分配内存空间的大小,free用于释放已分配的内存空间。动态内存的使用需要引用头文件或。
2023-12-09 15:40:43
1196
原创 C函数的模拟:strstr函数的模拟实现
situation1:如果在进行第二步的过程进行顺利,到最后当指针s2检测到字符串数组str2的末尾的'\0'时候,return cur;situation1:如果在进行第二步的过程中发现二者不相同了,那么就结束此过程,让s1回到cur的位置.s2回到str的位置。再进行对比的过程中一旦发现二者指针解引用后的值相同,就将s1和s2同时向着右边移动与此同时继续进行着对比的步骤。就是先把指针cur带着指针s1从字符串从最左的初始位置向右移动,一边移动的同时一边和s2进行对比。
2023-12-04 19:46:17
382
原创 c语言随笔:atoi函数简述与使用
atoi 可以理解成arr to int,就是将char型的字符串转换成int型输出。3. 如果指针先检测到字母字符,不管后面是啥,就算是数字也好,直接停止检测,返回值为0。1. 如果一个字符串中只有数字字符,那么返回值就是这个数字字符串本身。2. 如果一个字符串中啥都没有或者只有空格,那么返回值为0。当我们使用指针从左向右开始检测一个char型字符串。运行上述代码,我们可以得出结论。或者#include。函数返回类型及其参数。
2023-11-30 16:43:40
525
原创 EP14:结构体,位段,联合体(c语言中十分重要的知识模块(c语言学习笔记))
首先需要知道的,结构体和数组类似,都是属于自定义类型struct:是一个关键字,用来设置结构体的重要组成部分structstu:结构体的类型.(stu是自定义的)int age;都是结构体变量的成员名.
2023-11-29 19:41:01
493
原创 EP13:奇葩的函数strtok(c语言学习笔记)
函数参数:char * strtok ( char * str, const char * delimiters );函数的作用:将字符串以自定义的字符为节点将字符串切开.//所以这个函数就是拿NULL当个存档点了。
2023-11-25 21:31:11
416
原创 EP12:常用的<string.h>库函数整理(c语言学习笔记)
函数参数:char * strcat ( char * destination, const char * source );作用简介:将一个数组字符串里面的元素追加到另一个数组字符串中去调用与使用int main()//将字符串arr2追加到arr1中去return 0;
2023-11-25 21:13:53
459
原创 例题(c语言):使用指针对字符串倒序输出
主要是将字符串的第一个元素和最后一个元素用指针定位并且解引用出来进行交换,然后将两指针向中间靠,一边靠一边解引用并且交换,这是一个循环。
2023-11-21 17:08:10
843
原创 EP11:指针:函数指针调用创建,回调函数,库函数qsort的使用
d. int (*compar)(const void*,const void*) 这是一个自定义函数,需要根据程序员的需求写一个函数,这里填写函数名即可,而函数的返回值是int型,函数的参数类型是const void*,const void*.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数 时,被调用的函数就是回调函数。这这段代码中,函数Add,Sub,Mul,Div都是回调函数,因为它们都要靠cal函数用指针对其进行操作。回调函数就是一个通过函数指针调用的函数。
2023-11-17 21:39:58
77
原创 EP10:指针:二级指针,数组指针,二维数组传参,函数指针(c语言学习笔记)
定义:二级指针就是用于存放一级指针变量地址的指针对于二级指针的运算有:• *ppa 通过对ppa中的地址进行解引用,这样找到的是 pa , *ppa 其实访问的就是 pa .int b = 20;*ppa = &b;//等价于 pa = &b• **ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作: *pa ,那找到的是 a .**ppa = 30;//等价于*pa = 30;//等价于a = 30;1。
2023-11-15 07:52:53
93
原创 EP9指针:传址与传值,指针与数组,一维数组传参(c语言学习笔记)
有关数组名的理解一般来讲,数组名代表首元素地址,但是有下列两个情况除外• sizeof(数组名),sizeof中单独放数组名,这里的数组名表示整个数组,计算的是整个数组的大小, 单位是字节• &数组名,这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素 的地址是有区别的)因为数组名一般是首元素地址,而指针也是地址,所以可以得出结论数组名就是一个指针。
2023-11-11 15:51:29
81
原创 EP8:有关指针(c语言学习笔记:指针简介,指针运算,野指针)
先例举生活中的一个例子:去图书馆找书,我们肯定要根据图才可以此处书的编号可以为任意实数.当我们有了图书的编号,我们可以根据总表迅速找到我们想要的书.这个内存单元相当于放书的格子.每一个内存单元相当于一个内存编号,cpu可以快速找到一个内存空间.c语言中,这个就相当于地址,也可以叫做指针.2. 指针变量和地址。
2023-11-08 14:38:10
96
1
原创 EP7:二进制数及其操作符的使用(c语言学习笔记)
其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进 制、10进制、16进制是数值的不同表示形式而已。首先我们还是得从10进制讲起,其实10进制是我们生活中经常使用的,我们已经形成了很多尝试:• 10进制中满10进1• 10进制的数字每⼀位都是0~9的数字组成 其实二进制也是⼀样的• 2进制中满2进1• 2进制的数字每⼀位都是0~1的数字组成 那么 1101 就是二进制的数字了。
2023-11-06 18:19:25
137
原创 EP1==函数的递归(c语言学习心得(一点感想)/(认知))
Digsum(n%10)+n%10,这个东西的意思不仅仅是用来告诉你你刚才调过来的数据是要套用这里面的公式,也是告诉你用这个公式得到的数据接下来要传递到哪个函数里面接着运行的.可以这么理解,递归就是先拆解一个问题,但是我每次拆解好了一个问题之后又多出了一个新的问题,然后我再拆,拆到最后没有新的问题了(这一步叫'递')才发现上面的图最后都没有写限制条件,毕竟只有这个是写这篇博客的时候才写的,不管了,大家懂我意思就好,上面图有时间再重置.从上面的例子可以看出来,递归就是把一个大的问题化成许多小的问题。
2023-11-05 19:18:47
95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人