- 博客(20)
- 收藏
- 关注
原创 二叉平衡搜索树---红黑树
红黑树是一种自平衡二叉查找树,它在1972年由鲁道夫·贝尔发明,是为了克服二叉查找树在最坏情况下的性能问题而设计的。红黑树能够在最坏情况下也保持较为高效的查找、插入和删除操作时间复杂度为O(log n),其中n是树中节点的数量。红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(log n),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数,所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以实际运用中红黑树更多。
2025-03-23 00:09:06
940
原创 平衡二叉树 --- AVL树
前面对map/multimap/set/multiset进行了简单的介绍,这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡二叉树来实现。二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。
2025-03-22 10:26:54
612
原创 c++---二叉搜索树
二擦搜索树是为了给后面学习STL容器的map/set/multimap/multiset做铺垫,map/set/multimap/multiset系列的关联式容器底层就是平衡⼆叉搜索树—红黑树。
2025-03-01 19:21:45
817
原创 深度理解多态的底层实现
多态的核心:通过虚函数重写和继承来实现运行时动态绑定。通过基类接口屏蔽不同子类的差异,实现一对多的调用逻辑,不同子类通过基类接口调用。关键点:虚函数重写、虚函数表、虚析构函数、final / override关键字。面向对象编程:只关注"做什么"(接口),而不是"怎么做"(具体实现)。提高代码灵活性:新增加子类时,无需修改已有代码,只需扩展新的子类即可(符合"开闭原则")。简化代码逻辑:通过统一的的接口处理多种对象类型,减少条件分支(如if / else或 switch)
2025-02-21 21:54:19
814
原创 c++多态
多态时面向对象编程(OOP)的三大核心特征之一(封装,继承,多态),其核心思想是允许不同对象对同一操作表现出不同的行为。简单来说,多态让程序能够通过统一的接口处理多种不同类型的对象,而无需关心对象的具体类型。多态通常分为编译时多态和运行时多态;编译时多态,比如函数重载和运算符重载;运行时多态,主要依赖于虚函数和继承,这里需要注意的是虚函数表(vtable)的工作原理,以及如何通过基类指针或引用来调用派生类的方法;在虚函数的后面写上 =0 ,则这个函数为纯虚函数。
2025-02-11 19:41:14
631
原创 c++继承详解
继承是面向对象编程的三大特性之一,另外两个是封装和多态。继承允许一个类(派生类)继承另一个类(基类)的成员变量和成员函数,这样可以实现代码复用和层次化设计。继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。下面我们看到没有继承之前我们设计了两个类
2025-02-06 21:17:17
970
原创 c++模板进阶
模板总结【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2025-01-22 21:02:01
942
原创 c++模板初阶
/ 类内成员定义public:// 成员函数和数据成员可以使用T类型// ......T data;// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面模板分离编译会讲// 扩容++_size;代码复用:大大提高了代码的复用性,减少了重复代码的编写。
2025-01-21 16:51:29
767
原创 日期类的实现(类和对象的应用)
通过日期类的实行可以帮助我们更好的了解掌握之前类和对象学的6个默认成员函数(尤其是赋值运算符重载和普通对象和const对象的理解)
2025-01-06 20:26:23
519
原创 string 的基本用法
string是一个非常常见的数据类型,用于表示文本或字符序列。以下是关于它的详细介绍:string(字符串)是由零个或多个字符组成的有限序列。字符可以是字母、数字、标点符号、空格或其他符号。例如,“Hello”、“123”、“!@#$” 等都是字符串。
2024-12-01 11:23:20
1310
原创 c++ : 类和对象 (炼气一重阶段)
现代软件开发中,面向对象编程(OOP)是一种重要的编程范式,它通过将数据和操作数据的函数封装在一起,来提高代码的可重用性和可维护性。在C++语言中,类和对象是实现面向对象编程的核心概念。类可以被视为一种用户定义的数据类型,它定义了对象的属性(数据成员)和行为(成员函数)。对象则是类的实例,通过对象,我们可以访问和操作类中定义的数据和功能。本文将浅浅探讨C++中的类和对象,包括它们的定义、使用方式以及在实际编程中的应用。掌握类和对象的概念都是提升编程能力的重要一步。
2024-11-14 16:48:09
823
原创 c++入门
创建和使用命名空间• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{ }即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。// 创建一个命名空间//C++标准库都放在⼀个叫std(standard)的命名空间中。//cout和endl是std标准库中定义的,所以需要用域作用限定符展开。
2024-11-10 18:50:15
1119
原创 c++入门 --- 引用
引用在 C++ 中是一个强大的特性,允许通过别名来操作变量,提供了灵活性和性能优势。理解引用的使用和特性是掌握 C++ 的重要部分。
2024-11-10 17:43:26
819
原创 数据结构 : 选择排序
直接选择排序适用于数据量较小的情况,因为其时间复杂度较高,不适合大规模数据的排序堆排序是一种高效的排序算法,适用于大规模数据的排序。但由于其稳定性较差,在某些情况下可能不如其他排序算法(如归并排序或快速排序)方便,但在需要保证最坏情况下性能的场合,它是一个不错的选择。
2024-11-05 18:02:41
421
原创 数据结构 : 单链表
继顺序表之后,由于顺序存储结构的插入和删除操作不方便,所以我们引出了链式存储结构.今天要了解的是链表.链式存储结构的形式有:单链表,双向链表,循环或者不循环链表,带头或者不带头链表等那么单链表相比顺序表有哪些优点呢?请看下图//定义链表结点的结构//结点存放的数据元素//指向下一个结点的指针}SLTNode;例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
2024-10-20 18:15:44
667
原创 数据结构 : 顺序表详解
零个或多个数据元素的有限序列**示例:我们所熟悉的十二星座列表就是线性表,首先线性表是一个序列,其数据元素之间是有顺序的;线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表也分静态顺序表和动态顺序表本篇文章用的数据类型是结构体型#define N10。
2024-10-10 17:29:55
1322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人