自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言:排序(1)

直接选择排序的特性总结:1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:不稳定。

2024-09-29 16:50:42 2447 70

原创 C++:模版初阶

class 类模板名// 类内成员定义// 类模版public:_size = 0;// 扩容++_size;模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误。

2024-09-25 19:30:00 3185 58

原创 C++:类和对象OJ题

创建一个能够计算该月份天数的函数,和上一篇日期类的实现中的+=的运算符重载是一样的,代码比较简单看一下就明白了,打印的格式有要求,用cout不行就用的printf(有上一题的经验特别注意了一下输入输出的格式)。创建一个计算从0年0月0日到所给日期的天数,让两者相减就可以了,这里要注意一下,因为系统输入的年月日是黏在一起的(最开始代码一直没过就是没注意到这个),用cin就不行了,这里就可以用scanf。有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

2024-09-21 16:25:22 2304 74

原创 C++:日期类的实现

前面几篇讲了关于类和对象的一些知识,本篇就来实现一下前面用到的日期类。

2024-09-18 17:40:06 1872 86

原创 C++:初始化列表、友元、static

本篇内容就到这里了,希望对各位有帮助,如果有错误欢迎指出。

2024-09-13 01:00:00 1429 73

原创 C++:拷贝构造函数、赋值运算符重载

如果一个构造函数的第一个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数。这样写才是拷贝构造,通过同类型的对象初始化构造,而不是指针。这里可以完成拷贝,但是不是拷贝构造,只是⼀个普通的构造。也可以这样写,这里也是拷贝构造。

2024-09-10 00:30:00 2280 73

原创 C++:构造函数、析构函数

析构函数与构造函数功能相反,析构函数不是完成对对象本身的销毁,比如局部对象是存在栈帧的, 函数结束栈帧销毁,他就释放了,不需要我们管,C++规定对象在销毁时会自动调用析构函数,完成对象中资源的清理释放工作,析构函数的功能类比我们之前Stack实现的Destroy功能,而像Date没有Destroy,其实就是没有资源需要释放,所以严格说Date是不需要析构函数的。编译器默认生成MyQueue的析构函数调用了Stack的析构,释放的Stack内部的资源。这是用两个栈实现队列的代码,包含构造和析构。

2024-09-05 01:00:00 4121 85

原创 C++:this指针详解

本篇关于this指针的内容就到这里了,希望对各位有帮助,如果有错误欢迎各位指出。运行下面两串代码,会发现两个代码虽然只差了一行代码,结果却差别很大。C++实现stack代码。C实现stack代码。

2024-09-03 10:56:33 2110 68

原创 C语言:编译与链接

经过预处理后的.i文件中不再包含宏定义,因为宏已经被展开。并且包含的头文件都被插入到.i文件中,所以当我们无法知道宏定义或者头文件是否包含正确的时候,可以查看预处理后的.i文件来确认。

2024-08-27 02:00:00 2364 43

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

当是情况2的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找⼀个合适大小的连续空间来使用,这样函数返回的是⼀个新的内存地址。当是情况1的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。C语言还提供了⼀个函数叫 calloc , calloc 函数也用来动态内存分配。本篇关于动态内存管理的内容就到这里了,希望对各位有帮助,如果有错欢迎指出。由于上述的两种情况,realloc函数的使用就要注意⼀些。

2024-08-26 10:35:13 1353 68

原创 C语言:函数递归

这里我们看到了,在计算第40个斐波那契数的时候,使用递归方式,第3个斐波那契数就被重复计算了39088169次,这些计算是非常冗余的,所以斐波那契数的计算,使用递归是非常不明智的,我们就得想迭代的方式解决。当我们n输入为50的时候,需要很长时间才能算出结果,这个计算所花费的时间,是我们很难接受的,这也说明递归的写法是非常低效的,那是为什么呢?其实递归程序会不断的展开,在展开的过程中,我们很容易就能发现,在递归的过程中会有重复计算,而且递归层次越深,冗余计算就会越多。我们知道n的阶乘的公式:n!

2024-08-25 11:11:19 1193 38

原创 C语言:函数详解(2)

⼀般我们在使用函数的时候,直接将函数写出来就使用了。比如:我们要写⼀个函数判断⼀年是否是闰年。return 1;if(r == 1)printf("闰年\n");elseprintf("⾮闰年\n");return 0;上面代码中2~8行是函数的定义,第13行是函数的调用,这种场景下是函数的定义在函数调用之前,没啥问题。

2024-08-23 09:38:03 2051 48

原创 C语言:函数详解(1)

了解了库函数,我们的关注度应该聚焦在自定义函数上,自定义函数其实更加重要,也能给程序员写代码更多的创造性。

2024-08-21 15:43:45 1438 42

原创 C语言:一维、二维数组详解

目录一、数组的概念二、一维数组创建和初始化2.1 数组创建2.2 数组的初始化2.3 数组的类型三、一维数组的使用3.1 数组的下标3.2 数组的输入与输出四、⼀维数组在内存中的存储五、sizeof计算数组元素个数六、二维数组6.1 二维数组的概念6.2 二维数组的创建6.3 二维数组的初始化不完全初始化 完全初始化按照行初始化初始化时省略行,但是不能省略列 ​6.4 二维数组的使用⼆维数组的下标⼆维数组的输入和输出 6.5 ⼆维数组在内存中的存储数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2

2024-08-20 10:38:21 2052 36

原创 C语言:for、while、do-while循环语句

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合,我们可以使用 for 、 while 、 do while 实现循环结构。

2024-08-19 20:55:11 1882 38

原创 C语言:if&switch分支语句

C语⾔是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日·常所见的事情都可以拆分为这三种结构或者这三种结构的组合,我们可以使用 if、switch 实现分支结构。一、if语句。

2024-08-19 20:17:41 1432 43

原创 C++:缺省参数、函数重载、引用

引用不是新定义⼀个变量,而是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同⼀块内存空间。比如:水浒传中李逵,江湖上人称"黑旋风"。类型&引用别名=引用对象C++中为了避免引入太多的运算符,会复用C语⾔的⼀些符号,比如前面的>>,这里引用也和取 地址使用了同⼀个符号&,注意使用方法角度区分就可以。// 引⽤:b和c是a的别名int& b = a;int& c = a;// 也可以给别名b取别名,d相当于还是a的别名。

2024-08-16 13:20:09 1644 82

原创 C++:命名空间与输入输出

C++是一种面向对象的计算机程序设计语言,‌它扩展了C语言的功能,‌并引入了面向对象编程的概念,‌如类、‌继承和多态等,C++是以C语言为基础进行了拓展与创新,C++兼容C语言绝大多数的语法。还记得我们在学C语言时的第一个代码程序吗?C++也兼容这种写法,但是C++有⼀套自己的输入输出,严格说C++版本的hello world应该是这样写的。

2024-08-15 10:07:04 1603 83

原创 数据结构:二叉树OJ题

前面讲了很多关于二叉树的知识,再来几道二叉树的OJ题练手,加深印象的同时,能让我们更好的理解二叉树。int val;每道题都给了这个结构体,这里放出来就不没每道题都放上这个代码了。

2024-08-14 08:02:35 1081 30

原创 数据结构:链式二叉树(2)

上一篇链式二叉树(1),主要是讲了了一些链式二叉树的实现基础以及链式二叉树的遍历,本篇将会将上一篇没完成的实现内容继续完成。这里还是把实现链式二叉树的头文件放了过来}BTNode;// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树// 二叉树销毁// 二叉树节点个数// 二叉树叶子节点个数// 二叉树第k层节点个数// 二叉树查找值为x的节点// 判断二叉树是否是完全二叉树因为上一篇已经把链式二叉树的遍历讲完了,这里就暂时把它们去掉了。

2024-08-13 15:21:30 823 8

原创 数据结构:链式二叉树(1)

通过前面关于二叉树的基础知识我们知道链式二叉树分为二叉链和三叉链,本篇主要讲的是二叉链的实现,在此之前,为了方便实现链式二叉树的各个功能,我们需要先手动快速创建一个链式二叉树。}BTNode;注意:上述代码并不是创建二叉树的方式,这里只是图方便。这里再把创建的链式二叉树的头文件放在这里,包含了链式二叉树所需的头文件以及需要实现的函数功能}BTNode;// 构建一个简单的二叉树// 二叉树销毁// 二叉树节点个数// 二叉树叶子节点个数。

2024-08-12 17:58:31 1107 15

原创 数据结构:顺序二叉树(堆)

前面我们讲了二叉树有顺序结构和链式结构,今天就来讲一下顺序结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。

2024-08-10 16:25:07 815 10

原创 数据结构:二叉树知识基础

有一个特殊的结点,称为根结点,根结点没有前驱结点,除根结点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1又是一棵结构与树类似的子树,每棵子树的根结点有且只有一个前驱,可以有0个或多个后继,因此,树是递归定义的。度为2的结点有2个孩子,故每个度为2的结点产生两条边,所以总边数为:n1+2*n2。树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合,把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

2024-08-09 17:02:17 1355 15

原创 数据结构:栈与队列OJ题

前面讲了栈和队列的基础知识,今天来巩固一下加深理解,这里说明一下,因为现在都是在用C语言写,这些OJ题里都要用到前面实现栈和队列的代码,每道题我都会加上前面的链接方便查看。

2024-08-08 17:10:28 1520 7

原创 C语言 操作符详解

16进制的数字每⼀位是0~9,a~f的,0~9,a~f的数字,各自写成2进制,最多有4个2进制位就足够了,比如f的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进 制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就足够了,比如7的二进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀ 个8进制位,剩余不够3个2进制位的直接换算。

2024-08-07 14:41:52 1590 18

原创 数据结构:队列(含源码)

队列是一种只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出,进行插入操作的一端称为队尾,进行删除操作的一端称为队头,与栈刚好相反,栈时先进后出,队列是先进先出。队列和栈类似,都可以用链表和数组实现,不过有一点不同的是,队列用链表实现会更好一点,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低,这篇文章就用链表实现。另外了解一下,实际中我们有时还会使用一种队列叫循环队列,生产者消费者模型时可以就会使用循环队列,环形队列可以使用数组实现,也可以使用循环链表实现。

2024-08-06 21:07:10 675 3

原创 数据结构:栈(含源码)

先判断容量是否有足够的空间让数据入栈,在第一次入栈是先给定4个空间,后面每次不够时就将空间数乘以2, 还有一个判断是否开辟成功(这个可以不写,一般都会开辟成功)。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底,栈中的数据元素遵守后进先出的原则。我们在创建栈时,一般是创建支持动态增长的栈,定长的静态栈不实用。出栈非常的简单,只要将top数减少一个就行了,相当于是下一次入栈是直接把这个数据修改掉,就算没修改,打印时也不影响。

2024-08-05 17:56:32 742 6

原创 数据结构:链表经典算法OJ题

在了解了链表的相关知识后,我们还需要一些题目进行练习加深对链表这方面知识的理解,也可以用来检测链表这块学的的怎么样,废话不多说,开始上手。

2024-08-04 16:38:45 1189 10

原创 数据结构:双向链表

这里的“带头”跟“头节点”是两个概念,带头链表里的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这里“放哨 的” ,存在的意义: 遍历循环链表避免死循环。虽然有这么多的链表的结构,但是我们实际中最常用还是两种结构:单链表和双向带头循环链表,上一篇我们已经讲了单链表,今天就来了解一下双向链表并将其实现。顺序表和链表我们都学了,两者各有各的优缺点,根据需求的不通,运用在不同的场景。本篇的内容就到这里了,希望对各位有帮助,如果有错误欢迎指出。还是老样子,在头文件里写出我们需要功能的函数名。

2024-08-03 09:58:03 1349 2

原创 数据结构: 单向链表

链表的结构跟火车车厢相似,淡季时车次的车厢会相应减少,旺季时车次的车厢会额外增加几节。只需要将火车里的某节车厢去掉或者加上,不会影响其他车厢,每节车厢都是独立存在的,车厢是独立存在的,且每节车厢都有车门,想象⼀下这样的场景,假设每节车厢的车门都是锁上的状 态,需要不同的钥匙才能解锁,每次只能携带⼀把钥匙的情况下如何从车头走到车尾?与顺序表不同的是,链表里的每节"车厢"都是独立申请下来的空间,我们称之为“节点”, 节点的组成主要有两个部分:当前节点要保存的数据和保存下⼀个节点的地址(指针变量)。

2024-08-02 15:46:33 959 5

原创 数据结构:实现通讯录系统

上一篇我们讲了如何实现动态顺序表,这一篇就基于顺序表实现通讯录系统,我们知道顺序表的底层逻辑其实就是数组,同样的,通讯录系统也只是在顺序表之上进行了一层封装,相当于把每一个用户的所以数据都当做了数组中的一个元素,在通过顺序表的增删查改功能实现通讯录相对应的功能。每个数组元素中都包含这样整个的用户数据功能要求:1.能够保存用户信息:名字、性别、年龄、电话、地址等2.增加联系人信息3.删除指定联系人4.查找制定联系人5.修改指定联系人6.显示联系⼈信息。

2024-08-01 18:00:07 873 5

原创 数据结构:顺序表

顺序表是线性表的一种,而线性表是n个具有相同特性的数据元素的有限序列,线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的⼀条直线,但是在物理结构上并不⼀定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储,这个物理结构是否连续就是看物理地址上是否连续。顺序表与数组的区别:顺序表的底层结构是数组,对数组的封装,实现了常用的增删改查等接⼝。本篇的内容就到这里了,希望对各位有帮助,如果有错误欢迎指出,如果喜欢的话,

2024-08-01 09:27:18 1133 5

原创 C语言 自定义类型:结构体,联合体,枚举

但是编译器只为最大的成员分配足够的内存空间,联合体的特点是所有成员共用同⼀块内存空间,所以联合体也叫:共用体, 给联合体其中⼀个成员赋值,其他成员的值也跟着变化。{}中的内容是枚举类型的可能取值,也叫枚举常量 ,这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。4.如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构 体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。枚举顾名思义就是⼀⼀列举,把可能的取值⼀⼀列举。

2024-07-31 18:30:00 958 4

原创 C语言 strlen,strcpy,strcmp,strcat,strstr函数的使用及其模拟实现

看完这串代码,可能会有人觉得这串代码的结果会是str1>str2,毕竟3-6str1。strstr函数返回子串str2在主串str1中第⼀次出现的位置,字符串的比较匹配不包含'\0'字符,以'\0'作为结束标志。• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含 '\0' )。• 源字符串必须以 '\0' 结束。

2024-07-31 09:09:08 844 4

原创 C语言 理解指针(2)

根据数组名是数组首元素的地址这个规则,⼆维数组的数组名表示的就是第⼀行的地址,是一维数组的地址。那就意味着⼆维数组传参本质上也是传递了地址,传递的是第⼀行这个⼀维数组的地址,那么形参也是可以写成指针形式的。数组名是数组首元素的地址,那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组首元素的地址。• &数组名,这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素 的地址是有区别的)指针变量也是变量,变量就有地址,指针变量的地址就存放在二级指针中。

2024-07-30 21:09:32 983 4

原创 C语言 理解指针(1)

在我们生活中住宿楼里每个房间都有一个门牌号可以方便我们能够快速的找到想要去的房间,内存与此相似,我们知道计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,内存空间会把内存划分为一个个内存单元方便高效管理,每个内存单元的大小取1个字节。我们通过取地址操作符(&)拿到的地址是⼀个数值,这个数值有时候也是需要存储起来,方便后期再使用,我们就会把它存储在指针变量中,指针变量是一种用来存放地址的变量,存放在指针变量的值可以理解为地址。但是指针变量本⾝的内容可变。

2024-07-30 09:29:59 1545 8

空空如也

空空如也

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

TA关注的人

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