自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】红黑树

1. 红黑树的概念1. 红黑树的概念红黑树是一种自平衡二叉搜索树,通过节点染色和规则约束,保证最长路径不超过最短路径的两倍,避免退化成链表。节点只有红、黑两种颜色,根节点为黑色,所有叶子(NIL)是黑色;红色节点的子节点必须是黑色;从任意节点到其后代叶子的每条路径,黑色节点数量相等。插入、删除时会通过变色、左旋、右旋调整维持规则。它查找、插入、删除的时间复杂度稳定为 O (logn),相比 AVL 树平衡要求更宽松,调整次数更少,常用于 C++ map、set 底层实现。

2026-11-09 23:11:00 170 1

原创 【C++】哈希表

哈希(hash)又称散列,哈希就其实是英文有读音翻译过来的,他的意思就有变形什么的杂乱等翻译。哈希本质就是类似我们将已知东西由算法编辑成编码,定位到对应位置做到在O(1)直接访问内容的情况。类似我是一个水果店老板,我们在一堆的清单中要找到对定位置水果的价格,我们利用哈希算法,例如:西瓜经过哈希算法就得出134,在清单中那就找到134位置就对应就是西瓜价格,如果是其他水果就不能出来的数值就不是134,就是其他的数值。

2026-11-09 23:10:38 198 1

原创 【C++】AVL 树

AVL树是由Adelson-Velsky和Landis提出的首个自平衡二叉搜索树,通过限制节点左右子树高度差不超过1(平衡因子∈{-1,0,1}),确保查找、插入、删除操作最坏时间复杂度均为O(log n)。插入或删除后若失衡,通过单旋(LL、RR)或双旋(LR、RL)自动调整结构。尽管其平衡性优异,但频繁旋转导致写操作开销大,且需额外存储平衡因子,因此在写密集场景中不如红黑树高效,工程上常被替代。

2026-11-01 20:38:30 360

原创 【C++】set map 使用

与之前的类型的对比 string vector list stack queue deque priority_queue 等的类型的,set 和 map 的类型与二叉搜索树关系更加相似,但他们的底层是以红黑树构成的,如果你现在还没有了解红黑树的话,那就先以比二叉搜索树更加牛逼的理解就可以。

2026-11-01 20:38:00 213

原创 【C++】二叉搜索树

【C 数据结构】 树 二叉树 堆 (堆的模拟实现篇)-优快云博客二叉树(Binary Tree)是树形结构的一种,指每个节点最多有两个子节点的树。这两个子节点通常分别称为左子树和右子树,且左右次序不能随意颠倒。每个节点最多有两个子节点,即节点的度不超过 2。左子树和右子树是有序的,交换后属于不同的二叉树。即使某个节点只有一个子节点,也需要明确它是左子节点还是右子节点。二叉树可以为空,即不含任何节点。

2026-10-25 17:17:49 328 1

原创 【C++】多态

因为 vptr 指向的是对象真实类型对应的表,所以最终调用到的是派生类的版本,这就是动态绑定的底层实现。多态是一种事物存在多种状态的意思,例如:小明,小红,小亮,小明是作为一个成年上班族,购买车票只能全款买,小红是一个大学生,买票享有七五折优惠,小亮是一名退伍军人,享有优先买票,这就是多态。补充:虚函数表是 C++ 编译器实现多态的常见方式,标准并未强制规定其形式,不同编译器的具体布局可能略有差异,但“通过表间接调用”这一思路是通用的。多态分为编译时多态(静态多态)和运行时多态(动态多态)。

2026-10-25 17:17:37 73 1

原创 【C++】继承

封装,继承,多态是 C++ 一直强调的面向对象三大核心。封装将数据与方法打包,隐藏内部细节;继承实现代码复用,让派生类拓展基类能力;多态基于虚函数,用父类指针调用子类方法。本文结合实例拆解三者原理,理清继承权限、虚函数机制等难点,带你吃透 OOP 思想,避开开发常见陷阱。生活里的例子理解继承。比如父母拥有身高、肤色这些特征,还有做饭、沟通的能力,子女会继承父母的部分特征与本领。子女不需要从头重新拥有这些特质,在原有基础上,还能发展出自己独有的特点,比如父母会读书,子女在此之上学会编程。

2026-10-23 23:05:53 335 2

原创 【算法C++】双指针(一)

一般只用一趟或者两趟遍历。

2026-10-23 23:05:10 235 1

原创 非类型模板参数的特化与偏特化

本文介绍C++非类型模板参数及其特化与偏特化机制。非类型模板参数允许编译期常量(如整数、指针)作为模板参数,实现编译时计算与类型定制。通过完全特化和偏特化,可为特定值或类型模式提供专属实现,提升代码灵活性与效率。需注意其必须为编译期常量,且匹配优先级高于主模板。合理运用三者,可编写出高效、精准的泛型代码。

2026-10-17 16:03:31 44 1

原创 【C++】priority_queue 模拟实现

priority_queue与queue区别在于:priority_queue基于堆结构,默认以大堆方式维护元素优先级,底层使用vector和比较函数(如less),支持自定义比较逻辑。其核心操作包括top()取最大值、push()入堆、pop()出堆,通过adjustup和adjustdown实现堆的维护。模拟实现中,利用模板参数灵活控制容器与比较方式,体现高效优先队列机制。

2026-10-17 16:03:27 224 3

原创 【C++】 stack栈 queue队

1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue 提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问,并支持以下操作:

2026-10-14 19:45:34 339 2

原创 【C++】 deque 双端队列详解

deque是C++ STL中支持两端高效增删的双端队列,时间复杂度均为O(1),适用于栈、队列等场景。它支持随机访问(operator[])、迭代器遍历,底层分段存储,内存非连续但缓存性能优于list。相比vector,其头插头删效率高;相比list,随机访问更快。缺点在于中间插入效率较低且迭代器可能失效。综合来看,deque在头尾操作与随机访问间平衡良好,适合双端队列应用。

2026-10-14 19:29:26 345 3

原创 【C++】 list 类

链表示意图 1.1list 链表,底层主要实现的是一个带头循环链表。1.2 list的使用list 链表 与 vector 相同,也是一个模板类,vector 是一个开辟的是一个连续空间,list 不连续的空间。for (;it!= L.end();

2026-10-07 17:41:17 388 1

原创 【C++】auto

旧 C 语言里auto是「自动存储期」关键字,C++11 起被重新定义成类型占位符。重要规则auto a;auto。

2026-10-07 17:40:01 217

原创 【C++】vector 类

vector 与 string 比较相似,但就不像 string 需要考虑字符串相关的问题,vector 要真作区分的话,string 更像char* 而 vector 类似其他整形浮点型的数组,但是这么讲不完全准确,vector是一个模板类,每次需要调用 vector 都需要一个<int> 等等类型甚至可以用 vector<string>。就是限制只接收迭代器。注意点:发生扩容的时候会导致原先的记录的迭代器失效(就是原先的指针变成野指针),发生扩容时也需要更新迭代器,可以预先储存好相对位置,确保位置。

2026-10-01 21:46:55 380 1

原创 【C++】 string 类补充知识

stoi 是 C++ 标准库。

2026-10-01 21:46:46 201 1

原创 【C++】 模板(初级)

int _size;像这种Stack的类类型,只能申请出int的相关的类型,在这编译器了也所有跟Stack相关的类类型都是以int的相关的类类型,如果只是更改在编程中进行更改成char*那么所有向相关的类型都只能变成char相关的类类型,无法做到一个我想要一个int类型就是int类型的,一个想要char类型的做到 2 个及以上的操作。所有就需要到类模板的出现。

2026-09-12 17:29:19 154 2

原创 【C++】 string 的介绍

在 C++ 中,是标准库提供的字符串类,定义在头文件<string>中。它封装了字符序列的存储和管理,大部分我们所需常用的功能都可以在,相比 C 语言中以'\0'结尾的字符数组,在C语言中相对想要操控字符串删改内容等都需要自己进行函数进行函数搭建等比较麻烦,使用起来更安全、更方便,能够自动管理内存,并提供了丰富的成员函数用于字符串的拼接、查找、替换、比较等操作。

2026-09-12 17:29:00 393 1

原创 【C/C++】 内存管理

本文主要介绍了C/C++中的内存分布和动态内存管理方式。内容涵盖:1. C/C++程序内存五大分区(栈、堆、数据段、代码段等)及其存储内容;2. C语言动态内存管理函数malloc/calloc/realloc/free的使用;3. C++的new/delete操作符,对比其与malloc/free在处理内置类型和自定义类型时的区别,特别强调new/delete会自动调用构造/析构函数;4. 深入分析operator new/delete的实现原理及其与malloc/free的关系;5. 详细讲解new/d

2026-08-16 20:27:37 371 3

原创 【C++】 类与对象 (三)(补充内容)

本文摘要:C++中的类型转换包括内置类型转换和类类型转换,后者需构造函数支持,可使用explicit禁止隐式转换。静态成员(变量/函数)属于类而非对象,需类外定义(const static整型除外),静态函数无this指针,仅能访问静态成员。友元提供单向访问私有成员权限。内部类可直接访问外部类成员,分为成员内部类、静态内部类等。匿名对象是临时对象,用完即销毁,可用const引用延长生命周期。

2026-08-11 15:46:09 198 2

原创 【C++】 类与对象 (三)(1. 深度构造函数)

本文介绍了C++构造函数的两种初始化方式:初始化列表和成员变量声明位置赋缺省值(C++11支持)。重点分析了初始化列表的特殊功能,如对const成员和引用成员的初始化,并探讨了初始化顺序问题。初始化顺序遵循成员声明顺序而非初始化列表顺序,优先级依次为:初始化列表 > 成员缺省值 > 构造函数内部赋值。通过代码示例展示了不同初始化方式的实现效果,帮助理解构造函数的初始化机制。

2026-08-11 15:45:13 351 2

原创 【C++】 类与对象(二)(1.构造析构函数)

函数,来进行初始化,在每次都有可能我们忘记进行初始化,导致系统报错的可能,所以在C++中构造函数就为了解决这个问题的,在每次实例化对象的时候都会进行调用构造函数进行初始化。函数的作用,防止在我们忘记对空间释放时自动调用,与构造函数的特点一致,除了只会在生命周期结束时会使用,也不需要 void 做返回值,与构造不同就是在原先类名之前加一个。在书写构造类的时候,除了我们所写的成员函数之外,如果没有编写对应的默认函数,编译器会默认生成对应的6个默认函数,比较重要的前4个函数。为什么要写默认成员函数?

2026-08-10 10:00:00 243 3

原创 【C++】 类与对象(二)(2.运算符重载)

运算符重构是对类这和算符的适配性进行一个适配的重构,就是对于平常的运算符无法进行加减乘除等等还有赋值操作符进行一个新的从新修改。在++ 和-- 都有前置与后置问题,但是运算符有时一模一样就没有办法区分,所以C++就进行了一个特殊处理,有传参的运算符就是后置,没有的表示前置,一定要int 只要有传参即可区分。上面的代码都是等效的,这两个代码都是利用拷贝构造函数实现的,但所谓的赋值运算就是比已经实力化对象,进行赋值操作,就得重新对=赋值进行重构操作。传参参数可以加const ,进行防止误操的情况,但我们。

2026-08-10 10:00:00 334 6

原创 【C++】 类与对象(一)(class 类的定义)

本文介绍了C++中class类的定义、访问限定符、类域、实例化及对象大小计算等基本概念。重点讲解了this指针的本质及其使用场景,并通过练习题分析了空指针调用成员函数的情况。最后对比了C语言和C++实现栈结构的代码差异,体现了C++面向对象封装特性的优势。文章还包含两个关键练习题:空指针调用不访问成员变量的函数可正常运行(题1选C),而访问成员变量则会导致崩溃(题2选B)。

2026-08-07 21:20:54 368 6

原创 【C++】 入门基础(第一版)

定义命名空间,需要使用到namespace 关键字,后面跟命名空间名字,让后接{},{}中就是命名空间的成员,命名空间中就可以定义变量/函数等等。namespace 本质是定义出一个域,这样的域互不影响,不同的域可以定义相同名字的变量。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响 编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

2026-07-26 22:06:39 302 4

原创 【C 数据结构】 图(代码篇)

本文介绍了图数据结构的实现方法。主要内容包括:1. 图的构建方式,通过节点结构和邻接链表实现;2. 基本功能实现,包括节点初始化、创建、销毁,以及边的添加、删除和查找;3. 图的两种遍历算法:广度优先遍历(BFS)和深度优先遍历(DFS);4. 图的两种表示方法:邻接表和邻接矩阵,并提供了对应的代码实现和输出示例。文章详细说明了无向图的实现原理,包括节点间双向连接的建立和删除,并通过示例代码展示了具体实现过程。

2026-06-15 20:14:31 325 6

原创 【数据结构】 图(概念篇)

图(Graph)是由顶点(Vertex)边(Edge)组成的非线性数据结构,用于表示实体(顶点)及其关系(边)。数学上表示为 ( G = (V, E) ),其中 ( V ) 是顶点集合,( E ) 是边集合。

2026-06-14 23:09:18 849 7

原创 【C 数据结构】 排序

元素集合越接近有序,直接插⼊排序算法的时间效率越⾼时间复杂度:O(N^2)空间复杂度:O(1)

2026-06-07 23:06:04 347 13

原创 【C 数据结构】哈夫曼树的简单介绍

哈夫曼树的定义哈夫曼树其实的一个比较简单的知识点。那么哈夫曼树的树我们就应该知道这是一个树的结构,衍生出来的知识点。哈夫曼树(Huffman Tree)是一种带权路径长度最短的二叉树,也称为最优二叉树。由美国计算机科学家David A. Huffman于1952年提出,主要用于数据压缩领域。其核心思想是通过赋予高频字符较短的编码、低频字符较长的编码,从而减少整体编码长度。

2026-06-05 19:18:11 442 11

原创 【C 数据结构】list 链式表

本文介绍了链式表的分类方式及带头双向循环动态链表的模拟实现。链式表可分为单向/双向链表、静态/动态链表等类型,各有优缺点。重点详细讲解了带头双向循环动态链表的结构体定义、初始化、销毁、插入/删除节点等核心操作的实现方法,包括头插/尾插、头删/尾删等具体函数代码,并强调了循环链表操作中需注意的特殊处理点(如头尾连接和终止条件)。该实现通过动态内存分配和双向指针维护,展现了链表灵活高效的特性。

2026-06-04 19:09:16 290 9

原创 【C 数据结构】OJ 简单算法题

给你一个链表的头节点head和一个整数val,请你删除链表中所有满足的节点,并返回。该题就是就任=让我们先构建一个删除和一个识别val 的数值来实现。1、判断是否为空指针,如果为空指针就返回NULL2、声明一个节点指针和一个要被删除的预留指针。题目给的头指针不动,便于后面要返回数值的时候可以之直接返回头指针。3、构建循环体(1)判断条件ptr 到NULL就退出循环。(2)过程判断是否为val所要的数值,否就正常移动位置4、判断头指针是否为对应数值。5、返回头指针。

2026-06-03 21:38:10 428 11

原创 【C 数据结构】 树 二叉树 堆 (链式二叉树模拟实现篇)

本文介绍了链式二叉树的模拟实现,包括数据结构定义、基本功能实现和多种遍历方式。主要内容:1. 定义了二叉树节点结构体和树结构体;2. 实现了树的初始化和销毁功能;3. 详细讲解了前序、中序、后序三种递归遍历方式及其实现;4. 使用队列实现了层序遍历;5. 提供了计算节点数、叶子节点数、k层节点数、树深度的方法;6. 实现了查找元素和判断完全二叉树的功能。文章通过代码示例展示了各种操作的实现过程,并解释了相关概念和实现思路。

2026-05-27 22:58:30 490 11

原创 【C 数据结构】 树 二叉树 堆 (堆的模拟实现篇)

树是一种非线性的数据结构,由节点(Node)和边(Edge)组成。每个节点包含数据,并通过边与其他节点相连。树具有层次结构,最顶层的节点称为根节点(Root),没有子节点的节点称为叶节点(Leaf)。树的基本术语根节点(Root):树的顶层节点,没有父节点。父节点(Parent):一个节点的直接上层节点。子节点(Child):一个节点的直接下层节点。叶节点(Leaf):没有子节点的节点。子树(Subtree):树中任意节点及其后代构成的树。深度(Depth):从根节点到当前节点的路径长度。

2026-05-24 21:14:53 456 11

原创 【C 数据结构】 栈与队

本文详细介绍了栈和队列这两种线性数据结构的概念与实现。栈采用后进先出(LIFO)原则,实现了初始化、销毁、入栈、出栈等基本操作,并通过代码演示了栈的基本功能。队列遵循先进先出(FIFO)规则,实现了初始化、销毁、入队、出队等操作,同样提供了完整的代码示例。两种数据结构都包含判断空状态、获取元素数量等辅助功能,并通过主函数测试展示了完整的操作流程。文章最后展示了程序运行结果,验证了实现的正确性。

2026-05-18 21:25:22 353 9

原创 计算机内的数据存储方式

摘要:本文介绍了整数和浮点数在计算机内存中的存储方式。整数存储涉及源码、反码和补码三种编码形式,其中补码用于解决负数运算问题。文章还探讨了大小端字节序的区别及其应用场景,指出小端存储更适合现代计算机架构。对于浮点数,解释了其无法精确存储的原因,并详细说明了float和double类型的存储结构,包括符号位、指数位和尾数位的分配方式。通过+125.5的实例,展示了浮点数从十进制到二进制科学计数法的转换过程及其内存存储格式。

2026-05-16 10:45:21 468 4

原创 【C语言】 字符函数与字符串函数 和 <string.h>

string.h 的库函数里面有strcpy、strcat、strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror、memcmp等等的函数,那我们来一 一介绍。strlen 是用来计算字符串的首地址到达‘\0’位置之间又多少个字符的函数准确来说strlen 不是string.h 函数里面的没有string.h 的库函数也可以使用。放回类型:size_t (非负数的整形类型)传参: char* (字符指针)

2026-05-11 20:43:29 398 3

原创 【C 数据结构】 顺序表与单链表

链式表的功能实现更多的是我们对于逻辑的表达能力和数据的理解能力,和对于代码的基础工的扎实情况,如果你的基础功很扎实,对于逻辑表达能力和理解能力薄弱,就应该多去练习算法题目,如果你对于基础不扎实,那我还是建议你把C语言再次复习一次,如果你是两者并肩,但还是写不出来,那我建议你在构思代码时应该多在草稿纸上进行书写后在进行书写代码。不要把代码想成太复杂,多把复杂的代码分割成一小部分一小部分进行实现再合成一大块进行实现代码功能复现。!!悠仁さん。

2026-05-05 19:36:56 432 1

原创 【C 数据结构】 时间空间复杂

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以我们要学各式各样的数据结构,如:线性表、树、图、哈希等。

2026-05-04 23:22:54 307

原创 【C语言】指针

本文系统介绍了C语言中指针的概念与应用。首先阐述了指针的本质是存储内存地址的变量,通过取地址(&)和解引用(*)操作实现数据访问。详细讲解了指针变量的声明、大小(4/8字节)、运算规则及const修饰符的使用。深入探讨了指针与数组的关系,包括数组名作为指针、指针访问数组元素、数组传参机制等。通过实例展示了指针在函数参数传递(传址调用)、二级指针、指针数组、函数指针等高级用法中的核心作用。最后对比了strlen和sizeof的区别,并提供了qsort函数的模拟实现。全文以代码示例贯穿,全面呈现了指针这

2026-05-01 10:20:29 388 3

原创 【C语言】扫雷游戏

扫雷(Minesweeper)是微软 Windows 经典内置的单人逻辑推理益智小游戏,1992 年随 Windows 3.1 普及,最初用于训练鼠标操作。

2026-04-25 09:40:38 439 6

空空如也

空空如也

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

TA关注的人

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