- 博客(35)
- 收藏
- 关注
原创 数据结构【AVL树】
AVL树是一种高度平衡的二叉搜索树,其左右子树的高度差绝对值不超过1,确保了树的高度控制在O(logN)级别,从而使得增删查改操作的时间复杂度为O(logN)。AVL树通过平衡因子(右子树高度减去左子树高度)来维护平衡,平衡因子的值只能是0、1或-1。AVL树的结构包括节点值、左右子节点指针、父节点指针以及平衡因子。插入操作时,AVL树通过更新平衡因子并判断是否需要进行旋转来保持平衡。旋转操作分为四种:左单旋、右单旋、左右双旋和右左双旋,目的是在保持二叉搜索树性质的同时恢复树的平衡。
2025-05-17 20:23:13
1258
78
原创 数据结构【二叉搜索树(BST)】
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 1. 若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值。 2. 若它的右子树不为空,则右子树上所有结点的值都大于等于根结点的值。 3. 它的左右子树也分别为二叉搜索树。
2025-05-09 09:46:01
2265
77
原创 C++【继承】
Person是基类,也称作父类。Student是派生类,也称作子类。(因为翻译的原因,所以既叫基类/派生类,也叫父类/子类)
2025-05-06 17:39:45
1876
64
原创 数据结构【堆和链式结构】
定义:是特殊的二叉树fill:#333;color:#333;color:#333;fill:none;堆大堆小堆大堆(大根堆):根节点最大的堆小堆(小根堆):根节点最小的堆堆中某个结点的值总是不大于或不小于其父结点的值堆总是一棵完全二叉树。
2025-04-27 18:46:10
1915
78
原创 数据结构【树和二叉树】
树是一种非线性的数据结构,它是由 n(n>=0)个有限结点组成⼀个具有层次关系的集合。为什么叫树,因为它看起来像一棵倒挂的树。
2025-04-24 21:19:33
2533
69
原创 C++【string类】(一)
在C语言中字符出串是以‘/0’结尾的一些字符的结合,为了操作方便,C标准库中提供了一些str类库函数,但是这些库函数与字符串时分隔开的,不符合OOP(面向对象编程)的思想,并且底层空间需要用户自己管理,可能会越界访问。标准库类型string表示可变长的字符序列,使用string类型必须包含string头文件。作为标准库的一部分,string定义在命名空间std中。string类的析构出了作用域自动调用,把string内的资源进行释放。string常见的构造。
2025-04-09 17:53:29
1575
65
原创 数据结构【栈和队列附顺序表应用算法】
⼀种特殊的线性表,其只允许在固定的⼀端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出的原则。,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。概念:只允许在⼀端进行插入数据操作,在另⼀端进行删除数据操作的特殊线性表,队列具有先进先出。:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。中,使合并后的数组同样按 非递减顺序 排列。:栈的删除操作叫做出栈,出数据也在栈顶。个元素表示应合并的元素,后。
2025-04-05 15:59:47
1920
63
原创 数据结构【链表】
是⼀种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。结点的组成主要有两个部分:当前结点要保存的数据和保存下⼀个结点的地址(指针变量)。给定的链表的结构,实现链表从头到尾的打印。
2025-04-01 21:00:12
1340
82
原创 数据结构【顺序表】
定义:顺序表是一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。顺序表和数组的区别:顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接口。
2025-03-27 21:24:12
1447
72
原创 数据结构入门【算法复杂度】
数据结构是计算机存储,组织数据的方式,指相互之间存在的一种或者多种特定关系数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以就有各式各样的数据结构,如:线性表,树,图,哈希等。
2025-03-25 18:35:09
1685
80
原创 【C语言动态内存管理】(详细完整版)
C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做。函数向内存申请一块连续的空间,并返回指向这块空间的指针。连续的内存有益于提高访问速度,也有益于减少内存碎片。有了realloc可以让内存的开辟更加灵活。函数也⽤来动态内存分配。第⼆个好处是:这样有利于访问速度。malloc和free都声明在。free用来释放动态开辟的内存。C语⾔还提供了⼀个函数叫。第一个好处是:方便内存释放。以下又两种内存开辟的方式。
2025-03-23 18:20:49
1451
68
原创 【STL】简介
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
2025-03-22 10:38:11
329
19
原创 【C++模板】
模板是C++中泛型编程的基础,一个模板就是一个创建类和函数的蓝图或公式。假定我们希望编写一个函数来比较两个值,并指出第一个值是小于,等于还是大于第二个值。我们可以写多个函数重载去比较不同类型的两个值。不仅麻烦繁琐,而且还要考虑所有类型。我们可以定义一个通用的函数模板,而不是为每个类型都定义一个新函数。一个模板就是一个公式,可用来生成针对特定类型的函数版本,例如上文的比较两个值。//如果两个值相等,返回0,如果v1小返回-1,如果v2小返回1return 0;
2025-03-20 19:45:19
1116
25
原创 【C++内存管理】
我们编写的程序中所使用的对象都有着严格定义的生存期,全局对象在程序启动时分配,在程序结束时销毁。对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁。局部static对象在第一次使用前分配,在程序结束时销毁。除了自动和static对象外,C++还支持动态分配对象,动态分配的对象的生命周期与它们在哪里创建是无关的,只有当显示地被释放时,这些对象才会销毁。除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存被称作自由空间或者堆。程序用堆来存储动态分配。
2025-03-18 17:58:34
1244
23
原创 C++【类和对象】(超详细!!!)
(3).引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错。(4). C++11支持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显示在初始化列表初始化的成员使用的。将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后面。(1).以前我们初始化成员变量是在成员函数的函数体中赋值,现在有另外一种方式就是初始化成员列表。(3).类类型的对象之间也可以隐式转换,需要相应的构造函数支持。
2025-03-12 17:03:41
934
11
原创 C++【类和对象】
(7). 如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,如果默认生成的析构就可以用,也就不需要显示写析构,但是有资源申请时,⼀定要自己写析构,否则会造成资源泄露。(2). 拷贝构造函数的第⼀个参数必须是类类型对象的引用,否则会导致无穷递归,多个参数也可以,但是在保证第一个参数的条件下,后面的参数必须要有缺省值。(4).自动生成的拷贝构造对内置类型成员变量会完成值拷贝/浅拷贝(⼀个字节⼀个字节的拷贝),对自定义类型成员变量会调用他的拷贝构造。(3). 一个类只能有一个析构函数。
2025-03-09 20:23:56
1162
12
原创 C++【类和对象】
class为定义类的关键字,Stack为类的名字,{}中为类的主体。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。//分号不能省略。
2025-03-05 18:56:23
875
10
原创 C++【入门】
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2025-02-27 19:29:09
995
5
原创 C语言【指针】(3)
在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存内存空间大小的,单位是。统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。时,被调用的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,而是在特定的事件或条。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数。,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的大小。回调函数。qsort举例。
2025-02-07 22:34:51
301
2
原创 C语言【指针】(2)
1. 数组名的理解2. 使用指针访问数组3. ⼀维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组
2025-02-01 20:21:52
255
2
原创 C语言【函数】
1. 函数的概念2. 库函数3. 自定义函数4. 形参和实参5. return语句6. 数组做函数参数7. 嵌套调⽤和链式访问
2025-01-20 22:07:44
569
3
原创 C语言【数组】
数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。
2025-01-17 17:05:36
1059
1
原创 【C语言分支和循环练习题】
1. if 嵌套2.闰年的判断3.输⼊⼀个1~7的数字,打印对应的星期⼏4.在屏幕上打印 1~10 的值5.输⼊⼀个正的整数,逆序打印这个整数的每⼀位6.计算1~100之间3的倍数的数字之和
2025-01-13 20:29:30
484
4
原创 C语言分支和循环(下)
goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。前⾯学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决问题,就是我们所说的:循环嵌套。
2025-01-11 09:35:46
377
2
原创 C语言分支和循环(上)
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不。• || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。• && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。• >= ⼤于等于运算符。
2025-01-10 20:22:55
574
2
原创 C语言数据类型和变量
C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。内置类型:字符型,整型,浮点型,布尔类型。自定义类型:数组,结构体,联合体,枚举。printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
2025-01-09 17:31:22
1026
5
原创 C语言常见概念
如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C语⾔中的字符就遵循了 ASCII 编码的⽅式。在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号括起来的,如:‘a’,‘b’,‘@’。C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串的结束标志。• \f :换⻚符,光标移到下⼀⻚。
2025-01-08 10:12:44
949
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人