自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 map和set【C++】

本文摘要: C++标准库中的关联式容器set和map基于红黑树实现,具有自动排序特性。set存储唯一元素,map存储键值对,两者插入、删除、查找时间复杂度均为O(logn)。set元素不可修改,map的value可改但key不可变。使用时需注意迭代器失效问题,删除元素后原迭代器会失效。map通过[]运算符可实现键值访问/插入,set/map支持自定义排序规则。底层实现上,set和map共用红黑树模板,通过仿函数区分键值比较逻辑。迭代器采用中序遍历方式实现,支持双向移动但不支持随机访问。

2026-07-16 19:18:39 235

原创 红黑树【C++】

红黑树是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black,通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而接近平衡的。

2026-07-02 21:06:57 173

原创 Git的原理与使用

本文详细介绍了Git版本控制系统的安装、基本操作及高级功能。主要内容包括:1. Git安装与初始化(Ubuntu环境);2. 基本操作:配置用户信息、文件提交、版本查看与状态检查;3. 版本回退与修改撤销的多种方法;4. 分支管理:创建/切换/合并分支及解决冲突;5. 远程仓库操作:克隆/推送/拉取及忽略文件配置;6. 标签管理:创建/删除本地和远程标签。文章通过具体命令示例和操作流程,全面讲解了Git的核心功能和使用技巧,适合开发者系统学习Git版本控制工具。

2026-06-09 14:49:15 259

原创 vector的增删改查模拟实现(简单版)【C++】

vector的增删改查模拟实现(简单版)【C++】

2025-07-31 18:40:47 1040

原创 堆和堆排序【数据结构】

堆(Heap)是一种数据结构,它是 **一种特殊的二叉树** ,其中父节点的键值总是大于或等于(或小于或等于)其任何一个子节点的键值。这意味着在堆中,根节点具有最大(或最小)键值。

2024-01-29 11:50:13 1700 25

原创 二叉树【数据结构】

由一个根结点和两棵互不相交、分别称为根结点的左右子树的二叉树组成每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点左右子树是有顺序的不能颠倒空二叉树只有一个根结点根节点只有左子树根结点只有左子树根结点既有左子树又有右子树满二叉树: 在一棵二叉树中,所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上叶子结点只能出现在最下一层分叶子结点的度一定是2在相同深度的二叉树中,满二叉树的结点个数最多,叶子树最多完全二叉树。

2023-12-19 15:14:00 1965 38

原创 求最大公约数的几种常见的方法 【详解】

这里比较推荐是用 辗转相除法(欧几里得算法)和 《九章算术》中的 更相减损法多说一下,因为当时阿明浅浅学过遍辗转相除法,然后不久后就忘干净了,用的时候还要再去反复找,为了方便使用,干脆把 求解最大公约数 的几种常见的方法详细介绍一下,虽然不是最好,但是多少希望对大家有些帮助!希望大家对这些方法,有更加深刻的印象。加油!!!

2023-10-19 21:02:39 24028 40

原创 Leetcode: 347. 前 K 个高频元素 和 Leetcode: 692. 前K个高频单词

本文介绍了LeetCode两道前K高频元素问题的解法。347题要求返回整数数组中出现频率前K高的元素,通过map统计频次、存入vector排序后取前K项实现。692题扩展至单词列表,需处理频率相同按字典序排序的情况,核心思路相似但比较函数需额外处理字典序,可通过自定义比较函数或仿函数实现。两题均采用"统计-排序-取前K"的通用解法,时间复杂度主要由排序步骤决定,为O(N log N)。改进方案展示了使用仿函数替代静态比较函数的写法。

2026-07-07 21:11:58 200

原创 AVL树【C++】

AVL树是一种自平衡二叉搜索树,通过旋转操作保持左右子树高度差不超过1。文章详细介绍了AVL树的插入操作和平衡因子更新流程,重点分析了四种旋转场景:右单旋、左单旋、右左双旋和左右双旋。针对每种不平衡情况,文章提供了具体的旋转方法和平衡因子更新规则,并给出了完整的C++实现代码,包括节点插入、平衡判断和旋转操作等核心功能。通过维护严格的平衡性,AVL树确保了O(log n)的查找效率,避免了普通二叉搜索树可能出现的退化问题。

2026-06-30 19:31:43 179

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

本文介绍了二叉搜索树(BST)的基本概念和操作实现。二叉搜索树是一种特殊的二叉树,满足左子树节点值小于根节点、右子树节点值大于根节点的性质。文章详细讲解了BST的插入、查找和删除操作:插入时需要找到合适位置并维护父子节点关系;查找通过比较键值进行;删除操作分为三种情况(无子节点、单子节点、双子节点),其中双子节点情况采用替换法处理。文中提供了C++实现代码,并特别强调了删除操作中处理替换节点时的注意事项。BST的平均时间复杂度为O(logN),是一种高效的数据结构。

2026-06-23 20:38:23 246

原创 list模拟实现(简单版)【C++】

本文介绍了C++中list的模拟实现,重点讲解了其底层数据结构、迭代器设计及常用操作。主要内容包括:1. list底层采用带头双向循环链表结构,通过节点类模板实现数据存储;2. 详细设计了ListIterator迭代器类,重载++、--、*;等运算符实现遍历功能;3. 实现了push_back、insert、erase等核心操作,并处理迭代器失效问题;4. 采用模板参数复用代码实现const迭代器;5. 完善了构造函数、拷贝构造、赋值运算符和析构函数等特殊成员函数。文章通过具体代码示例演示了各功能

2025-10-04 11:36:56 1098

原创 小白学习《PCI Express体系结构导读》——第Ⅰ篇第1章PCI总线的基本知识

本文摘要主要介绍了PCI总线的基本知识。PCI总线作为处理器系统的局部总线,主要用于连接外部设备,具有地址空间隔离、可扩展性强、动态配置机制、高带宽、共享总线机制和中断机制等特点。PCI总线通过HOST主桥与处理器隔离,支持即插即用功能,最大可挂接256个设备,并采用总线仲裁机制实现共享带宽。文章还对比了PCI总线与其他总线的性能差异,强调PCI总线在现代计算机系统中的重要地位及其对PCIe总线的影响。

2025-08-16 22:30:43 1262

原创 string的增删改查模拟实现(简单版)【C++】

string的增删改查模拟实现(简单版)【C++】

2025-07-19 18:45:20 987

原创 string类【C++】

学习使用标准库中的string

2025-07-16 15:38:08 729

原创 模板初阶【C++】

泛型编程是一种编写与类型无关的通用代码的技术,旨在提高代码的复用性。C++中的模板是实现泛型编程的基础,分为函数模板和类模板。函数模板允许定义一个通用的函数,能够处理多种数据类型,编译器会根据传入的实参类型生成相应的函数版本。函数模板的实例化分为隐式实例化和显示实例化,隐式实例化由编译器根据实参推演模板参数的实际类型,而显示实例化则是在函数名后指定模板参数的实际类型。类模板与函数模板类似,但类模板的实例化必须显式指定类型。类模板的声明和定义通常放在同一个文件中,以便编译器能够正确处理模板的实例化。通过使用模

2025-05-21 21:31:24 600

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

/ 例如 链表_val = 0;int _val;//构造,_val(val){}int main()//new操作符 在为自定义类型申请空间时,会去调用构造函数//如果new失败了后抛异常,不需要手动检查//delete操作符 会去调用析构函数return 0;在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。

2024-03-08 19:04:55 1455 3

原创 类和对象 02【C++】

初始化列表:构造函数中用于初始化成员变量的特殊语法。explicit阻止隐式类型转换。static成员为类共享的数据或函数。友元机制突破封装,友元函数/类可访问私有/保护成员。内部函数是类内的嵌套函数。匿名对象常用于初始化或返回值场景。拷贝对象时,编译器进行如深拷贝、RAII等优化。

2024-03-08 07:49:08 1173

原创 类和对象 01【C++】

在C++中,我们使用关键字 class 来定义类。类可以包含数据成员(变量)和成员函数(方法)。对象是类的实例。要创建一个对象,你需要使用类的名称,后面跟着一个或多个参数(如果有构造函数的话)。

2024-02-21 21:59:41 1184 3

原创 初识cpp【C++】

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{ }即可,{ }中即为命名空间的成员。命名空间解决了C语言中的命名冲突问题例如:出现命名冲突的原因:当然,在引入在第三方库时,C语言也容易出现重定义现象;解决方法:将命名冲突的变量放到命名空间域中上图中 namespace lisi 中的 lisi 是 命名空间的名字命名空间中可以定义变量/函数/类型命名空间可以嵌套同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

2024-02-21 10:29:09 1925

原创 排序【数据结构】

排序是将一组数据按照一定的顺序排列的过程。常见的排序算法有很多种,包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。不同的排序算法有不同的优缺点,适用于不同的场景和数据类型。

2024-01-29 22:11:05 1279 4

原创 Leetcode: 203. 移除链表元素

这里free(cur) 会把第一个结点的内存空间释放返回给操作系统,pre->next = next;即此时的 pre 是NULL ,cur指向的是head(第一个结点),删去结点(free(cur))。先让cur指向第一个结点,遍历结点,把不等于val的值给放到新的链表里。这样的话就要考虑如何找被删除元素的前一个结点,和被删除元素的下一个结点。因为 要删除的元素可能不仅仅是一个,也有可能是多个。前提是:删去的不是第一个结点的情况下。遍历链表,删除指定元素(val)给你一个链表的头节点。

2023-12-19 15:22:13 3544 41

原创 带头结点的双向循环链表

/存放后面结点的指针//存放前面结点的指针}ListNode;

2023-12-01 19:40:26 2283 67

原创 常见基础指令【Linux】

一个文件的ACM时间是:A(Access)文件最近一次被访问的时间;先使用head 读取3010行的内容,再把读取的内容,使用tail 读取3010行中的后10行。绝对路径是指文件或目录的完整路径,包括从根目录(/)开始一直到该文件或目录的路径。需要注意的是:当文件有数据时,先清空,再把hello 放到test.txt里面。上述指令意思是:将hello 输出重定向到test.txt文件中。相对路径是指文件或目录相对于当前工作目录的路径(./)。cp [选项] 源文件或目录 目标文件或目录。

2023-12-01 19:37:31 340 8

原创 栈和队列【详解】

栈:仅限在一端进行插入和删除元素操作。数据插入删除的一端称为栈顶,而另一端称为栈底。数据的插入操作。数据的删除操作。栈中的数据遵循后进先出,简称LIFO)的原则。栈的存储定义这里采用的是顺序栈,以动态数组的形式进行存放栈的元素,当栈满时,可以动态的增加栈的容量。定义一个指针负责指向动态数组,用top来表示栈底,还有就是栈的容量capacity。int top;//栈底//栈的容量}Stack;2.栈的初始化当栈的存储定义完成后,就开始对栈进行初始化。//初始化栈。

2023-11-22 16:31:34 1064 61

原创 Leetcode:622. 设计循环队列 题解【具详细】

首先我们需要定义出一个循环队列的存储定义,这里采用的是使用动态数组来进行模拟循环队列,根据题中给出的接口返回类型,我们可以知道循环队列的数据类型为int。其次,还需定义两个记录数组的下标,一个记录队列的队头,另一个记录队列的队尾(也就是指向要入队的下一个元素的位置)。另外还要提供一个表示要存储数据的具体个数。如图:

2023-11-22 16:25:05 1705

原创 单链表(增删改查)【超详细】

单链表的存储与顺序表的存储不一样,单链表不仅仅存放数值,还要存放下一个结点的地址代码//存放单链表的值//存放下一个单链表的地址}SLNode;当有了单链表的存储定义,我们就可以对单链表进行存放结点。

2023-11-10 16:05:51 4279 59

原创 Leetcode:876. 链表的中间结点 【详解】

head难度:简单由题目可以知道,题目要求返回中间的结点。

2023-11-10 15:53:21 297 6

原创 【数据结构】顺序表

存储单元依次存储。

2023-10-30 20:39:30 4028 65

原创 【时间复杂度和空间复杂度】

首先介绍一下算法(Algorithm)算法是对特定问题求解步骤的一种描述。一个“好”的算法应该达到以下目标:正确性、可读性、健壮性、高效率与低存储量需求算法的效率的度量 是通过时间复杂度和空间复杂度来描述的。

2023-10-30 20:35:06 230 9

原创 Leetcode:【189. 轮转数组】

给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数难度:中等向右轮转 1 步:向右轮转 2 步:向右轮转 3 步:向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]

2023-10-24 20:55:45 359 27

原创 程序环境、预处理和宏

注意:预定义符号都是语言内置的__FILE__ 进行编译的源文件__LINE__ 文件当前行号__DATE__ 文件被编译的日期__TIME__ 文件被编译的时间__STDC__ 如果编译器遵循ANSI C,其值为1,否则未定义例如int main()int a = 0;return 0;例如注意 #define MAX 6 后面最好不要加分号,容易出错。

2023-10-19 16:40:11 379 51

原创 文件操作【详解】

平时我们说的硬盘上的文件就文件当然在程序设计中,我们一般说到的文件有两种:程序文件、数据文件(从文件功能上来看)。1.程序文件源程序文件 (后缀 .c)目标文件(.obj)可执行程序(.exe)2.数据文件程序运行时读写的数据,需要输入输出的文件3. 文件名文件名包含三部分: 文件路径+文件名主干+文件后缀例如 d:\code\test.txt。

2023-10-09 19:42:24 1795 55

原创 超级圣诞树(BC115) 【题解】超详细

前言这个题看了很久,没想出来,然后看了一些大佬的题解(可能是我的理解能力有些慢),中途有很多次放弃的想法,但是最终坚持着 ,研究明白了。所以想结合我的想法更加具体分享一下。

2023-10-09 19:40:25 2278 60

原创 动态内存管理

有时我们使用malloc和calloc函数进行动态内存分配的时候,我们发现所分配的空间已经固定下来,那木我们就会想 会不会有一种可以调整动态内存大小的动态分配的内存函数呢?所使用的内存就是栈内存,函数执行时自动分配内存,函数退出时自动释放内存。栈内存的特点是速度快,但分配的内存大小有限,可能会导致栈溢出。但是如果只是这样,有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给。

2023-10-01 21:15:29 1493 77

原创 Leetcode:【485. 最大连续 1 的个数】

在二进制数组中,元素只有 0 和 1 ,返回得是连续1最多得个数,此时回想到 用一个变量来记录每一次得连续1的个数(count_1),再用另一个变量(max1)来记录其中连续1个数中 的最大的数。开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3., 计算其中最大连续。

2023-09-26 11:14:20 633 24

原创 【C语言】通讯录

在通讯录中,我们一般保存联系人的信息,联系人的信息一般会有 姓名、年龄、性别、电话、地址等。在通讯录中,我们也会对一些信息进行增删改查。在这里我们发现switch 语句中 的case 选项中的常量表达式 是字母,这里主要是利用了枚举常量。这里采用的思想是 数组后面的元素前移将前面的元素覆盖来达到删除该信息的目的。上述是增加联系人的信息,既然增加联系人我们就来查看联系人信息。功能实现的前提是 先对通讯录 进行设计 并 初始化。contact.c 用于主要代码的功能实现。这里是直接调用的初始化通讯录函数。

2023-09-26 11:13:31 2615 58

原创 MT1184矩形相交 题解【超详细】

输入2个矩形的左上角和右下角两个点的坐标值(x,y),判断2个矩形是否相交,输出YES或者NO。矩形的边应与x,y轴相平行。假定输入坐标能顺利构成矩形,不考虑无效矩形的况难度:白银输入格式:输入整型,空格分隔。每行输入一组信息。输出格式:输出YES或者NO输入:输出:NO备注:特殊情况考虑:在数学中,两个图形相交是指它们有公共的部分,或者说同时属于两者的点的集合不是空集。若两个几何图形在某个地方有且只有一个交点,则可以称为相切而不是相交。

2023-09-22 18:39:37 1397 70

原创 【C语言】自定义类型:结构体【结构体内存具详细】,枚举,联合

(1)声明类型的同时定义变量p1//结构体变量的定义和初始化int x;int y;}p1;//声明类型的同时定义变量p1(2)初始化,定义变量的同时赋值struct Stuint age;(3)结构体嵌套初始化struct Stuint data;//结构体嵌套初始化枚举就是列举enum ColorRED,GREEN,BLUEenum SexMALE,FEMALE,SECRET。

2023-09-19 14:31:34 1789 84

原创 Leetcode: 645.错误的集合 题解【超详细】

在这里求的缺失的元素是,简单思路就是 可以用一个临时数组(数组中的全部元素置0)来 把[ 1, n ] 这些数组元素存放到相应的数组中(就是与相应的数组下标与之对应)【例如】 元素 1 ,存放到临时数组 下标 1 中;题目是要求我们返回数组的(即一个重复的元素,一个缺失的元素)。然后在 numsSize大小的数组中进行遍历 其中那个元素为零(因为只有1个元素是缺失的)就是缺失的数组。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合。这里用的就是两层for循环,

2023-09-16 09:46:43 1523 61

原创 【C语言】字符函数和字符串函数

(1)函数头部size_tstrlen(constcharstring(2)注意事项字符串以 '\0'作为结束标志,strlen函数返回的是在字符串'\0'前面出现的字符的个数(不含\0)参数指向的字符串必须要以\0结束函数的返回值是类型是 size_t 这是无符号整型(易错)(3)strlen的使用int main()//获取字符串的长度return 0;(4)strlen的模拟实现//普通实现count++;

2023-09-11 14:24:57 2250 69

空空如也

空空如也

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

TA关注的人

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