- 博客(72)
- 问答 (29)
- 收藏
- 关注
原创 【C++】内存管理
看完了使用new/delete如何去操作C++中的【内置类型】,接下去我们来看看我们要如何去操作一个自定义类型首先我们来看看C语言中我们是如何去操作自定义类型的,下面有一个单链表的结构体,此时我们若是要构建出一个个链表结点的话,还需要去调用下面这个函数,很是麻烦int val;exit(-1);但如果用C++的话就不一样了,我们可以使用之前所学习过的构造函数初始化列表在开辟出空间的时候就做一个初始化的工作,做到事半而功倍int val;: val(x){}
2024-09-20 23:16:30 1110
原创 【C++】一起探究开挂神器——模板(初阶)
先来看到的就是其定义格式,函数模版加在函数上,那对于类模版的话就是加在类上class 类模板名// 类内成员定义我们以下面这个Stack类为例来进行讲解如果你学习了模版的相关知识后,一定会觉得这个类的限制性太大了,只能初始化一个具有整型数据的栈,如果此时我想要放一些浮点型的数据进来的话也做不到public:perror("malloc申请空间失败!!!");return;_size = 0;_size++;// 其他方法...~Stack()_size = 0;
2024-09-19 20:42:43 838
原创 【C++】类和对象(下)
特性2:友元函数不能用const修饰,因为友元函数只是一个全局函数,不属于类的成员函数,所以它没有隐藏的this指针,而const修饰的就是this指针,只有非静态的成员函数才能用const修饰。【单向】这个词很重要,一样还是上面的Date类,因为在Time类中声明了其为它的友元类,但是在Date类中没有声明Time为它的友元类,所以Time是无法访问到Date类中私有成员的。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。
2024-09-14 15:45:52 1012
原创 【手撕数据结构】八大排序神功(上)
我们建堆就是为了排序数组,既然是升序,就是小的在前面,大的在后面。我们建大堆可以保证,堆顶一是最大的,这时候我们只需要把堆顶与数组最后一个元素交换,就可以保证数组最后一个元素是最大的。如果有一个关键码的集合K = { k0, k1, k2,…,kn-1 },把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中。i+2 ) i = 0,1,2…【时间复杂度】:O(NlogN)【时间复杂度】:O(N^2)【空间复杂度】:O(1)【空间复杂度】:O(1)【空间复杂度】:O(1)【空间复杂度】:O(1)
2024-09-07 21:43:29 629
原创 【手撕数据结构】二叉树的性质
目录叶子节点和边的性质概念小试牛刀叶子节点和边的性质概念可以看到度为0的节点如F没有边,度为1的节点如C有一条边,而度为2的节点如B有两条边。那么设度为2的节点为a个,度为1的节点为b个。二叉树边 = 2a+b另⼀⽅⾯,由于共有 a+b+c 个节点,所以边数等于 a+b+c-1这里-1是因为:综合上面两个公式,我们2a+b = a + b + c - 1; 推出c = a+1(c为度为0节点,a为度为2节点)所以叶子结点n0 = n2 + 1;小试牛刀这道题已经告诉了我们度
2024-08-31 22:19:14 527
原创 【C++】日期类的实现
前面我们已经学了类和对象上、中两个模块的内容了,我们可以综合学习的这些内容来实现一个日期类。日期类的实现我们用3个文件来实现,分别是,Date.h Date.cpp test.cppDate.h文件用于类中需要的成员函数的声明Date.cpp文件用于成员函数的实现test.cpp文件用于用户测试案列下面是Date.h的内容class Date//友元函数//友元函数解决类外面函数访问私有变量public://构造函数else。
2024-08-28 16:30:12 608
原创 【手撕数据结构】链式二叉树
所以当k=1的时候,是第k层,第k层节点个数实际就是第k-1层的左右孩子节点个数,求k-1层节点的左右孩子节点即可。📚当k > 1 时,第k层的结点个数为第k - 1层左孩子节点个数 + k-1层右孩子的结点个数。除了判断k之外,别忘了每次都要判断一下传进来的根结点是否为空,防止访问。规则:二叉树高度 = 左子树和右子树中高度大的那个 + 1。📚当k == 1时,return 1。规则:左子树——右子树——根。
2024-08-19 18:00:35 1030
原创 【手撕数据结构】Topk问题
对于Top-K问题,能想到的最简单直接的⽅式就是排序,但是:如果数据量⾮常⼤,排序就不太可取了。TOP-K问题:即求数据结合中前K个最⼤的元素或者最⼩的元素,⼀般情况下数据量都⽐较⼤。⽐如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。2)⽤剩余的N-K个元素依次与堆顶元素来⽐较,不满⾜则替换堆顶元素。,堆中剩余的K个元素就是所求的前K个最⼩或者最⼤的元素。将剩余N-K个元素依次与堆顶元素⽐完之后,然后。前k个最⼤的元素,则建⼩堆。前k个最⼩的元素,则建⼤堆。
2024-08-16 20:49:23 289
原创 【C++】拿捏运算符重载
所以当运算符重载函数放到类内时,就要改变其形参个数,否则就会造成参数过多的现象,在形参部分给一个参数即可,比较的对象就是当前调用这个函数的对象即【this指针所指对象】与【形参中传入的对象】【概念】:运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。时,C++语⾔允许我们通过运算符重载的形式指定新的含义。👉【参数类型】:const T&,传递引用可以提高传参效率。👉解决办法3:设置友元【不好,会破坏类的完整性】【函数原型】:返回值类型。
2024-08-16 12:25:49 955
原创 【C++】类和对象(中)
假设有这么个场景,你需要往栈里面入栈数据。Stack st;st.Push(1);st.push(2);但是一运行起来可以发现,程序却奔溃了,这是为什么呢?原来我们没有写Init函数,那么,栈都还没有开辟空间初始化这些仔细一想就发现好像是忘记Init()初始化了,加上之后就没有问题了那么问题就来了,我们使用栈这个数据结构的时候,有时总是会忘记初始化出问题。这在练习中可能容易发现,但是如果在一个大项目中就难以调试。这就要涉及到我们的构造函数(C++默认的6个函数之一)首先我们来介绍这六个函数。
2024-08-12 22:06:48 758
原创 【手撕数据结构】二叉树和堆
首先看到结构体的定义及声明,是不是回想起了我们之前所学的顺序表,因为顺序表的底层其实也是一种数组int size;}Hp;
2024-08-09 13:52:50 838
原创 【C++】类和对象(上)
C++中用class关键字来定义类,和C语言中结构体一样其中类的主体用{}括起来,并在后面加上分号类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数为了区分成员变量,在命名的时候开头用_或者m(不强制)// 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号【 注】:class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略还记得我们在数据结构中讲的栈吗?
2024-08-07 09:34:31 691
原创 【C++】内联函数vs宏 && nullptr
inline不建议声明和定义分离到两个⽂件,分离会导致链接错误。因为inline被展开,就没有函数地址址,链接时会出现报错。return 0;解决这个问题就直接把定义和声明写到同一个头文件中这样内联函数在展开的时候就可以找到地址#nullptrC++中NULL可能被定义为字⾯常量0,或者C中被定义为⽆类型指针(void*)的常量。不论采取何种。
2024-08-03 19:47:16 739
原创 【C++】初识引用
首先来看第一个,若是定义了一个引用类型的变量int&,那么就必须要去对其进行一个初始化,指定一个其引用的对象,否则就会报错int a = 10;int& b = a;int& c;
2024-08-03 18:37:22 1107
原创 【C++】初识C++
命名空间里面也可以嵌套命名空间。就像结构体里面也可以嵌套结构体这时候我们对于:是不是也可以封装在一个命名空间里面在嵌套定义两个命名空间//队列代码 {//单链表代码 } }
2024-08-01 22:04:21 1019
原创 【手撕数据结构】链表面试题进阶
新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。2.设置random指针,这就体现了我们为什么把新链表的节点尾插到旧链表中相对应的节点的好处,我们可以直接通过变量旧链表->random->next指针找到新链表中的random指针的位置。如果其中一个链表比另一个链表长就始终会比短的链表少走一步,这里我们不妨算出两个链表的长度,求他们的差值,让长的链表先走差值步,再长链表和短链表一起走就行了。如果链表无环,则返回 null。
2024-07-31 20:32:48 711 1
原创 【手撕数据结构】链表高频面试题
n1:记录指针指向将要反转的结点反转后要指向的位置。n2:记录指针指向将要反转的结点。n3:记录指针指向将要反转的结点的下一个结点。
2024-07-30 17:56:21 812 8
原创 【手撕数据结构】循环队列
而使用数组就可以直接移动front指针而不直接删除空间,如果需要重新利用删除的空间直接将front指针指向原来的空间,直接覆盖就行。这里我们需要多开辟一块空间,因为我们需要判断循环队列是否满了,这时候就有人说了,直接判断rear和front指针是否相等就行了啊.但是遗憾的是,我们队列为空的时候front也与rear相等。我们前面已经介绍过队列,他的基本操作就是在队头出元素,在队尾如元素。今天介绍的循环队列与前面的队列有所不同,他可以一直利用申请的空间进行循环的出队列,入队列等操作。
2024-07-29 14:27:59 443 1
原创 【手撕数据结构】栈和队列高频面试题
如果需要出栈,则将有数据的队列的size-1个元素移倒另外一个空队列中,将剩下的元素进行出栈。如果要出队列就把入队列的栈一直取栈顶导入为空的出队列中,这样原本1 2 3 4 的由于先进后出就达到了另外一栈存储的是4 3 2 1 这样的顺序,符合队列的先进先出原则。思路:该题是栈的典型应用,满足后进先出的规则(后入栈的前括号将优先与先出现的后括号相匹配)遍历字符串,遇到前括号直接入栈。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。否则,返回 false。
2024-07-28 22:54:29 270
原创 【把玩数据结构】详解队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列遵守先进先出FIFO(First In First Out)的原则。入队列:队列的插入操作叫做入队列,进行插入操作的一端称为队尾。出队列:队列的删除操作叫做出队列,进行删除操作的一端称为队头。
2024-07-28 17:02:33 353
原创 【手撕数据结构】把玩栈
栈(stack),栈遵守先进后出的原则,即先入栈的数据后出栈,插入数据是在栈顶插入,被称为压栈。出栈也是与顺序表的尾删一样的,这里直接将top减减,不影响后面再次在那个位置插入数据,会直接覆盖.但需检测栈是否为空,若为空,则不能进行出栈操作。进行入栈操作前,我们需要检测栈的当前状态,若已满,则需要先对其进行增容,然后才能进行入栈操作。栈的内存空间是动态开辟出来的,当我们使用完后必须释放其内存空间,避免内存泄漏。因为栈也是一种线性表,并且在物理结构上也是连续的,所以我们底层采用数组(顺序表)实现。
2024-07-21 08:29:18 244
原创 【手撕数据结构】拿捏双向链表
前面说到,链表的结构一共有八种:带头单向循环链表、带头单向非循环链表、带头双向循环链表、带头双向非循环链表、无头单向循环链表、无头单向非循环链表、无头双向循环链表、无头双向非循环链表。在这八种结构中,我们只挑两种来进行刨析,即无头单向非循环链表和带头双向循环链表。而今天我们要介绍的双向链表就是带头的,头结点head也被称为哨兵位,如果链表为空,则链表只有一个哨兵位。双向链表的结构为//方便以后修改双向链表存储的数据类型}LTNode;
2024-07-20 23:18:12 821
原创 【手撕数据结构】拿捏单链表
单链表也叫做无头单向非循环链表,链表也是一种线性结构。他在逻辑结构上一定连续,但是在物理结构上不一定连续(随机开辟空间),链表由一个或多个节点足够,每个节点由两部分组成,一个是存储的数据,一个是指向下一个节点的指针。
2024-07-20 08:35:18 667
原创 【手撕数据结构】把玩顺序表
顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组线性结构又是什么意思,这就不得不提到线性表了线性表(linear list)是n个具有相同特性的数据元素的有限序列线性表是⼀种在实际中⼴泛使 ⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串注意的是,他在逻辑结构上一定是连续的,但在物理结构上不一定是连续的.线性表在物理上存储时,通常以数组和链式结构的形式存储那么我们知道,数组在内存中存储也是连续的,并且也是类型一致,那么他与顺序表的区别是什么呢.
2024-07-19 19:39:04 1001
原创 【手撕数据结构】卸甲时/空间复杂度
要想知道什么是空/时间复杂度,就得知道什么是数据结构。这得分两层来理解。我们生活中处处存在数据,什么抖音热点上的国际大事,什么懂的都懂的雍正卸甲等等一系列我们用户看得到的,就是抖音存储在后台服务器的数据。但这些数据都有一个特点,那就是都在抖音的热搜榜单上,而这个榜单就是结构,保证数据在一个固定的位置里以便用户浏览。此外有了数据结构,就离不开算法。那么我们刚刚说了,数据结构是把数据有规律的存储在一个结构中,那么怎么从结构中有效率的存取数据,这就是算法。
2024-07-08 20:40:07 1166 2
原创 【C语言】文件的顺序读写
对文件数据的读写可以分为顺序读写和随机读写。顺序读写,即挨着顺序对文件中的数据进行输入或输出。在这片博客中,我们首先介绍文件的顺序读写需要用到的文件操作函数。
2024-07-02 11:08:26 1046
原创 【C语言】文件操作(1)
什么是文件?文件是计算机文件,属于文件的一种,与普通文件的载体不同,计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。在程序设计中,我们一般关注的文件有两类,即程序文件和数据文件。程序文件: 包括源程序(以.c为后缀)和可执行程序(以.exe为后缀)。数据文件: 文件的内容不一定是程序,而是程序运行时读写的数据。比如程序运行时需要从中读取数据的文件,或者输出内容的文件。注:这里本篇内容讨论的是数据文件。我们已经了解了文件的基本概念,那么我们如何通过代码对某一个文件进行一些操作呢?
2024-07-02 10:40:12 781
原创 重行吾之所道,洒青春之热血
各位码友好,我是来自重庆城市科技学院软件工程的一名准大一新生,相信大家以前或许看过我的文章,实不相瞒,我是一名中职生,那时候因为临近高考不得已,暂时放下编程去补文化课,如今高考已完成,我又可以像当时那样追求我所爱的东西。我认为学习编程就要做到知行合一,不要光看,重要的是理论与行动相结合,用行动带动理论知识,做到理论的体现。三、我最想进入的公司是腾讯,我认为我能在那里扩大自己的视野,增长自己的经验与阅历,在那里实现我的目标。1.掌握必要的编程语言如C/C++,java。3.掌握计算机网络协议。
2024-04-01 06:22:06 235
空空如也
关于c语言自增运算符的问题
2023-11-03
关于C语言双字符串组合问题
2023-07-20
关于结构体访问问题.
2023-05-06
关于变量与自身自减的比较问题
2023-04-04
关于C语言逻辑与的断路特性问题
2023-03-12
关于C语言阶乘问题。,
2022-10-21
关于C语言数据类型转换的问题
2022-08-26
一道关于c语言编程问题
2022-04-30
关于printf函数格式输出%%d的问题
2022-04-04
数学表达式转c语言表达式
2022-04-03
c语言练习题望解答。
2022-03-09
mac os操作系统下vs code 编译器c语言头文件无法打开问题
2022-02-14
关于qsort库函数排序问题
2022-01-21
关于辗转相除法的过程
2022-01-03
关于break语句的问题
2021-12-11
关于c语言LNK2019问题
2021-12-10
关于函数被不明引用问题
2021-12-05
执行代码后无缘无故出现的数字
2021-12-04
编程实现循环代码。.
2021-11-29
关于自定义头文件的问题
2021-11-21
关于打印替换字符的问题
2021-11-13
关于变量新来旧去规则
2021-11-11
关于结构体返回问题.
2021-11-11
关于自定义函数问题。
2021-11-07
眼睛都看痛了,不知道怎么输出那个相加的数
2021-11-04
关于for循环工作过程问题
2021-11-04
按要求写出正确的逻辑表达式
2021-10-28
关于ASCll码字符型运算问题和复合运算符问题
2021-10-20
关于c语言代码书写格式的问题
2021-10-18
关于刚刚接触c语言数组的问题
2021-10-17
关于后辈的前途道路疑问的问题
2021-10-10
关于代码问题.?!。
2021-10-01
关于代码的错误问题.
2021-09-20
关于换行符的问题求解决
2021-09-11
c语言新小白第一次写代码问题
2021-09-11
小白入坑c语言的问题
2021-09-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人