- 博客(44)
- 收藏
- 关注
原创 【C++】string类
首先string并不是STL中的,而是一个类string比STL出现的早从上面可以看出string是从一个类模板中实例化出来的一个对象在使用string类是必须要包头文件#include< string >又因为是std中的类,所以要using namespace std;
2024-12-11 21:29:47
506
原创 【C++】模板初阶
class 类模板名public://函数声明,_top(0)private:T* _array;int _top;比之C语言,C++的模板在写顺序表时会方便很多,要是相同场景的C语言要想完成上面一次开辟两个不同数据类型的情况就要写两个顺序表,在命名上就要不一样。
2024-12-09 18:24:03
839
原创 【C++】内存管理
class Apublic://构造函数:_a1(a1)//析构函数~A()private:int _a1;int main()//这里最大的区别是,new在创建时会调用构造函数,并且可以传值进行初始化//在销毁时delete会调用析构函数free(p1);delete p2;//内置类型几乎是一样的free(p3);return 0;这里最大的区别是对于自定义类型,new会调用自定义类型的构造函数,delete会调用自定义类型的析构函数。
2024-12-03 21:06:49
1990
原创 【C++】类和对象(中)
如果类中没有资源申请,就不用析构,如Date类型,而有资源申请的我们就要自己实现析构,如Stack类型,而对内置类型都是自定义类型,和内置类型的,也不用自己写析构因为编译器会自动调,如Queue类型。传值返回会生成一个临时拷贝,调用拷贝构造,所以有时为了减少拷贝,可以传引用返回,但是传引用返回返回的是变量的别名,在返回时要保证返回的别名还在否则会出现类似空指针的空引用的错误。,它的名字是由operator和后面的运算符号共同组成的,因为也是函数,所以和函数一样,有参数列表,返回类型,函数体。
2024-11-26 15:07:49
689
原创 【C++】类和对象(上)
1>class为定义类的关键字,Stack为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。<2>为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后面加_或者m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。<3>定义在类面的成员函数默认为inline。_top = 0;//扩容。
2024-11-21 16:07:36
1101
原创 【C++】C++入门基础
1>定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。<2>namespace本质是定义出⼀个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不在冲突了。<3>C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2024-11-19 23:17:18
937
原创 【数据结构】七种常用排序总结
以下为七种排序的讲解:【数据结构】插入排序——直接插入排序 和 希尔排序【数据结构】选择排序——选择排序 和 堆排序【数据结构】交换排序——冒泡排序 和 快速排序【数据结构】归并排序 —— 递归及非递归解决归并排序在排序过程中数组中相同数的相对位置不会发生改变的排序是稳定的,反之我们说排序是不稳定的稳定:不稳定:在只进行一次排序的情况下,排序的稳定性都没什么意义在进行二次或多次排序时稳定性是有意义的举一个例子:在学校录取学生时,往往有很多人总成绩是相同的那么为了为学校录取需要的人时会再进行
2024-11-19 16:23:40
516
原创 【数据结构】归并排序 —— 递归及非递归解决归并排序
归并排序的时间复杂度为 O(N * logN)是比较快的排序但是归并排序有它的缺陷它的空间复杂度为 O(N)排序需要开辟空间当排序数量过大时有风险。
2024-11-19 15:33:40
672
原创 【数据结构】快速排序——非递归实现快速排序
内存中分了几个区用于存储数据栈区比较小,堆区比较大我们在递归时是在栈区开辟空间所以当递归深度过深时会有栈溢出的风险有时在某些特定情况下我们担心会栈溢出所以采用非递归的方式就是我们自己来模拟函数在栈上递归的过程因为我们自己创立的栈在堆区所以空间会大很多,就减小的栈溢出的风险下面是自己建立栈的方式。
2024-11-12 16:31:14
469
原创 【数据结构】交换排序——冒泡排序 和 快速排序
其实经过学习,快速排序其实在发明之初并不是最快的但是经过多轮改进快速排序已经被存在了 c 语言库中就是qsort这是 c 语言库中的快排对于快排人们进行了很多研究当我们要递归的深度过深时我们可以用自己实现的栈来模拟栈中递归【数据结构】快速排序——非递归实现快速排序当然在 c 语言的函数库中不可能搞非递归的方式于是有人研究出了自省排序那什么是自省排序呢?就是它会检查函数递归的深度当递归的深度到一定程度时,就会转变为别的排序如堆排,希尔排序。
2024-11-10 22:32:21
1228
原创 【数据结构】选择排序——选择排序 和 堆排序
选择排序思路很简单就是经过将数组遍历选择最小值将最小值位置的数与数组最前面位置的数进行交换如此反复,完成排序为了提高效率我们在一次遍历过程中同时找最大和最小值。
2024-11-07 20:23:10
513
原创 【数据结构】插入排序——直接插入排序 和 希尔排序
我们要如何理解直接插入排序呢?当遇到比tmp小的数就将tmp插入到该数的后面当走完循环就可以完成排序我们看到我们这里的循环条件是 i < n - 1因为当 i 为倒数第二个数时插入的数为倒数第一个数。
2024-11-06 22:31:42
1403
原创 【数据结构】二叉树——判断是否为完全二叉树
我们想要判断二叉树是否为完全二叉树我们可以用队列来实现我们先将根节点入队列再将根节点出队列,判断取出节点是否为空、若不为空将该节点的左右节点入队列左右节点为空也入队列若为空则停止入队列然后判断队列中是否有 NULL若有则说明不是完全二叉树若没有则说明是完全二叉树。
2024-11-03 22:40:54
445
原创 【数据结构】二叉树——层序遍历
上面我们学习了递归与非递归的方式去对二叉树进行层序遍历我们发现递归的代码简介,而且好理解那我们为什么不用递归而会去研究非递归的方式呢?因为我们的递归过程会重复调用函数,就会在栈上开辟空间而栈中空间大小是有限的若我们的递归深度太深就会有栈溢出的风险而非递归方式开辟的队列是在堆中开辟的空间会大很多一般不会出现空间被占满的情况。
2024-11-03 22:24:41
816
原创 【数据结构】二叉树——前中后序遍历
所谓的前中后序遍历其实就是我们访问二叉树时读取数据的顺序我们在访问数据时我们可以选择将该节点的数据取出来,或者接着向下遍历,我们取出节点数据在遍历过程的顺序就是前中后序我们先手搓一个如上图的二叉树。
2024-11-03 19:52:56
1021
原创 【数据结构】二叉树——堆
首先堆是一个完全二叉树,堆中的数字要以一定的规则进行排列如果我们创建一个堆让堆中所有根部数据都小于该根的左右两孩子的数据,那么这个就是一个小堆让堆中所有根部数据都大于该根的左右两孩子的数据,那么这个就是一个大堆所以我们可以理解为,若堆第一层根部为整个堆的最大值,为大堆,若为整个堆的最小值,为小堆对于堆这种特殊二叉树来说,因为堆是完全二叉树,所以不存在中间有用不到的空间,所以对于创建堆这个特殊结构,我们选择采用顺序结构存储。堆的全部代码。
2024-10-28 22:46:23
1194
原创 【数据结构】顺序表与链表的区别和各自特点
而缓存从内存中查找数据时,通常会将与要取出的数据后的一串数都取出,例如数组缓存一次查找就会将数组中的所有数据都取出,而在取链表中的数据时,每一次调用其中一个节点时就会将节点后面的一串数据取到缓存,这样缓存中会就会有一些无用的数,造成。我们电脑中数据的读取是分内存和缓存的,缓存的传输速度是比内存快的当我们在程序中调用某一数据时,会先从缓存中找,若在缓存中找到了就会很快,不用再从内存中找,这个叫做。链表是通过一个个独立的空间链接在一起,所以链表在逻辑上是线性的,而物理上不是线性的。
2024-10-19 22:29:54
570
原创 【练习题】设计循环队列
对于这个题,我们采用了两种方法用链表创建用数组创建这两种方法各有优势,用链表创建是在创建时会很麻烦要手动开辟一个循环链表,而数组就简单的多,但是当建立好链表后,后续的思路比较清晰没有那么多坑。用数组创建的优势是可以下标访问,不用像链表那样还要循环遍历,降低了空间复杂度,而且数组在缓存利用率上有天然的优势。
2024-10-19 21:47:04
2289
原创 【数据结构】栈的概念与结构
栈是一种特殊的线性表,跟顺序表类似,本质上都是数组,但是栈只能进行插入和删除,不能在指定位置插入删除,进行插入和删除的一端叫做栈顶,而另一边叫做栈底,我们只从栈顶对栈进行插入和删除,如我们向栈中加入数据“1,2,3,4,5”,那当我们将数据取出时顺序时“5,4,3,2,1”。因为和顺序表很类似,而且很简单,我在顺序表哪里也讲过,要是有哪里不懂可以看下面的链接,是有关顺序表的。栈的插入操作叫做入栈 / 压栈 / 进栈,下面是栈的实现代码。
2024-10-13 22:31:30
331
原创 【C语言练习题】括号的匹配
我们通过栈,我们遇到做括号就将左括号入栈,当遇到右括号就出栈,这样就能进行两两匹配。我们的目标是判断括号与括号之间是否是匹配关系,也就是判断括号是否是对称关系。下面是这个练习题,可以试着做一下。这里我们要用到栈,这个知识点。
2024-10-13 20:31:29
372
原创 【数据结构学习】链表的带环问题
如图所示,在单链表中,当其中一个节点不指向下一个而指向前的任意一个节点,使链表成环状,当我们遍历链表时,会陷入死循环。
2024-10-12 17:22:42
874
原创 【C语言学习】顺序表的应用 “通讯录”
/先定义一个通讯录的结构体变量//我们需要 姓名 性别 年龄 电话 地址202020100int age;#define 来定义变量,这样要改时也方便。
2024-09-22 14:59:39
711
原创 【C语言学习】动态顺序表的实现
因为在里面的函数中我们会改变这个顺序表中的值,而函数中的参数是形式参数,在栈区,当出函数后就会销毁,那就不会改变实参中的数据,所以我们要传一个地址进去,然后用指针接收,然后里面用 到“ -> ” 来取数据,这样我们就直接将数据写在了我们创建顺序表的地址处。这个里面判断 for 循环中 i 的取值条件时,我们可以想在最后时,也就是第一个数移向第二个数,这时数组的下标 arr[1] = arr[0] ,这是也就是 i ==1 时,所以 i 的取值条件就可以写成,i > 0。如果等于,那么整个算式等于 4。
2024-09-22 14:54:39
811
原创 【C语言学习】顺序表
就好像火车,每一节火车车厢都是独立的,然后将一个个火车车厢连接起来就成了一辆火车,但火车并不是一整个都是一起的,只是我们通过一定的方法将他链接起来了,所以在我们说时,说 “一列火车” 这其实是一个抽象的线,所以这就是逻辑结构。
2024-09-22 14:52:58
613
原创 【C语言学习】数据结构
数据结构就如名字一样,由 “数据”和 “结构” 组成。什么是数据?我们平时的数字 1,2,3,4…还有比如我们考完试发下的成绩单,上面记录着我们的名字,成绩,班级,并且一 一对应。还有我们相册中的一张张照片。什么是结构?就比如我们的成绩单,当我们需要保存大量结构相同但数据类型的数据时,为了避免重复的输入不同的数据类型,我们定义一个结构,这里面的数据都按照固定的格式储存。所以结构也可以说是组织数据的方式。。数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合。
2024-09-22 14:50:54
454
原创 【C语言学习】atoi函数
那是什么字符都可以吗?我们来看下面的介绍。接下来,我们探究一下这些功能。函数在一开始遇见空格时会过滤掉第二次遇见空格就会结束运行函数在数字前遇见 “+” 时会忽略 “+”函数在数字前遇见“ - ” 时会忽略“ - ”在第二次遇见“ + ”或者“ - ”时会忽略,并且不显示后面的数字函数在遇见非数字字符时就会结束运行函数在没有识别到数字字符时会返回,并且返回值是0当数字字符串,超出 int 类型的最大储存时,会输出 INT_MAX。
2024-09-11 21:49:54
3312
4
原创 【c语言学习】数组
数组是的集合;从这个概念中我们就可以发现2个有价值的信息:1 >数组中存放的是1个或者多个数据,但是数组元素个数不能为0。2>数组中存放的多个数据,类型是相同的。数组分为一维数组和多维数组,多维数组⼀般比较多见的是⼆维数组。
2024-09-10 21:48:14
720
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅