自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 5.【C++进阶】红黑树

本文深入解析红黑树的核心原理与实现。红黑树是一种自平衡二叉搜索树,通过颜色约束(根黑、无连续红节点、各路径黑节点数相同)确保最长路径不超过最短路径2倍,实现O(logN)的高效操作。重点剖析了插入操作的三种处理方式:单纯变色、单旋+变色和双旋+变色,并通过C++代码展示了具体实现。最后介绍了验证红黑树规则的方法,包括检查路径黑节点数一致性和无连续红节点等约束条件。文章结合图文与代码示例,系统性地阐述了红黑树保持平衡的底层机制。

2025-08-31 21:52:36 652

原创 4.【C++进阶】AVL树

AVL树是一种高度平衡的二叉搜索树,通过平衡因子(右子树高度-左子树高度)确保任意节点左右子树高度差不超过1。其核心操作包括插入和旋转处理:插入时按二叉搜索树规则定位位置,更新路径上节点的平衡因子;当平衡因子变为±2时,通过单旋(左/右)或双旋(左右/右左)恢复平衡。旋转后无需继续更新平衡因子,保证操作效率为O(logN)。代码实现包含节点结构、平衡因子更新逻辑和四种旋转操作,确保树始终保持平衡状态。

2025-08-30 11:28:44 946

原创 3.【C++进阶】二叉搜索树

本文介绍了二叉搜索树的基本概念、性能特点及底层实现原理。二叉搜索树遵循"左<根<右"的法则,是map/set等容器的底层结构。其查找效率最差为O(N)。文章详细解析了查找、插入和删除操作的实现方法,并附有对应LeetCode题目链接和代码示例,其中删除操作根据节点子节点情况分为四种处理方式,对左右子树均存在的节点采用替换法处理。

2025-08-29 10:46:02 282

原创 10.【C++进阶】多态

本文深入解析C++面向对象编程中的多态特性。首先区分了编译时多态(函数重载、模板)和运行时多态(虚函数机制),重点阐述了动态多态的实现条件:基类指针/引用调用虚函数,且完成虚函数重写。详细讲解了虚函数重写规则、协变、析构函数重写等关键概念,并通过代码示例演示了多态的实际应用。文章还剖析了多态底层原理,包括虚函数表机制和动态绑定过程,对比了静态多态与动态多态的区别。最后介绍了抽象类和纯虚函数的特性,说明其强制派生类重写的机制。全文通过丰富的代码实例和图示,帮助读者深刻理解C++多态的核心概念和实现原理。

2025-08-28 15:33:24 822

原创 【Linux系统】1.Linux基础指令与权限

本文介绍了Linux常用基础命令及其应用场景,包括文件目录操作、重定向、管道等核心概念。主要内容有:ls/pwd/cd用于目录导航;touch/mkdir创建文件目录;rm/cp/mv管理文件;cat/head/tail查看文件内容;重定向(>/>>)和管道(|)实现数据流控制。文章通过具体命令示例演示了Linux文件系统操作的基本方法,强调了"Linux下一切皆文件"的设计理念,并对比了Windows系统的差异。这些基础命令是Linux系统管理和开发的基础技能。

2025-08-25 15:56:19 902

原创 9.【C++进阶】继承

本文深入探讨C++继承机制的核心概念与实现细节。主要内容包括:1)继承的定义与访问控制规则,重点分析protected成员和三种继承方式(public/protected/private)带来的权限变化;2)基类与派生类间的赋值转换规则,强调派生类到基类的切片机制;3)继承中的名称隐藏现象及作用域处理;4)派生类默认成员函数(构造/拷贝构造/赋值/析构)的实现要点,特别指出构造函数必须显式调用基类构造,析构函数会自动调用基类析构等特点。通过代码示例展示了继承的实际应用,为深入理解面向对象编程中的类层次复用提

2025-08-14 17:00:32 1012

原创 【专题三】二分

本文介绍了二分查找算法的核心原理与应用场景。通过解决三个典型问题(查找元素范围、寻找峰值和旋转数组最小值),展示了如何利用二段性特征进行高效查找。重点讲解了左右端点的查找模板和记忆技巧,并强调二分查找不仅限于有序数组,关键在于发现问题的二段性特性。文中包含详细的代码实现和算法图解,帮助读者掌握二分查找的核心思想和实际应用。

2025-07-22 11:58:31 327

原创 【专题二】滑动窗口

本文介绍了滑动窗口算法的解题步骤和应用实例,包括长度最小的子数组、最大连续1的个数 III、将x减到0的最小操作数、字符串中所有字母异位词和最小覆盖子串等5道力扣题目的解法。文章详细讲解了滑动窗口的核心思想:通过单调性或固定窗口大小优化暴力枚举,利用双指针动态维护窗口区间。每个题目都提供了暴力解法和滑动窗口优化解法,并配有图示说明算法原理。关键点包括利用数组单调性、正难则反思想、哈希表统计字符频率等技巧,展示了如何通过滑动窗口将时间复杂度从O(n²)降至O(n)。

2025-07-22 10:08:37 1104

原创 【专题一】双指针

双指针算法应用总结 双指针算法主要包括对撞指针和快慢指针两种类型,适用于具有单调性或循环结构的问题。双指针特别适合处理有序数据或环形结构问题。算法核心在于利用指针移动时的单调性,避免不必要的计算。

2025-07-19 11:21:13 592

原创 【stack和queue】二叉树进阶算法题

本文主要梳理涉及到栈和队列使用的二叉树算法题

2025-07-12 14:19:11 762

原创 8.stack和queue

双端队列,是一种双开口的“连续”空间的数据结构,是vector和list的“缝合怪”deque由一段段连续的小空间拼接而成,类似于一个动态的二维数组,由一个**指针数组(中控数组)**来进行控制(2)deque的优缺点①deque的头/尾插效率很高,甚至高于vector和list②deque的随机访问效率略逊于vector③deque在中间位置插入和删除数据效率很低(3)选择deque作为stack和queue默认底层容器的原因:栈和队列不需要也无法访问中间的数据,

2025-02-07 20:34:01 598

原创 7.list

list的底层是带头循环双向链表带头:含哨兵位循环:尾节点的next指针指向哨兵位双向:每个节点具有两个指针域,一个指针指向前一个结点。

2025-02-07 17:29:28 538

原创 6.vector

本博客对C++中的vector进行梳理。

2025-02-06 20:15:34 606

原创 5.string类

本博客对C++中的string类进行梳理。

2025-01-15 17:18:41 331

原创 4.模板初阶

class 类模板名// 类内成员定义对模板,不要把声明和定义分离到两个文件,.h和.cpp会出现链接错误。

2024-10-29 15:57:31 290

原创 3.C++内存管理

多种初始化方式在申请自定义类型空间时,new会调用构造函数,delete会调用析构函数(malloc和free不会)申请和释放单个元素的空间:用new和delete操作符;申请和释放连续的空间,使用new[]和delete[],要匹配使用。

2024-10-29 15:56:05 419

原创 2.3类和对象(下)

的地方3.必须在初始化列表初始化的成员。

2024-10-19 17:13:35 907

原创 2.2类和对象(中)

(1)是一个特殊的构造函数(2)第一个参数是自身类类型的引用,且任何额外的参数都有默认值。

2024-10-10 15:40:36 1269

原创 2.1类和对象(上)

class。类中的变量称为类的属性/成员变量,类中的函数称为类的方法/成员函数(2)为区分成员变量,一般会加点特殊标识(比如 _ )(3)C++中struct升级成了类,也兼容C的用法,但建议平时还是用class定义类,便于区分(4)定义在类里面的成员函数默认为inlineclass Datepublic:_day = day;private:// 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如_//成员变量放在成员函数的上面/下面无所谓int _year;

2024-10-10 15:39:34 554

原创 1.C++入门基础

(1)关键字:namespace,后面跟命名空间的名字,再接一对{}。可以定义变量/函数/类型等(2)namespace的本质:定义一个域,有了域隔离,命名冲突就解决了(3)namespace只可以定义在全局,支持嵌套定义——即命名空间里面还可以有命名空间(4)工程上,多文件中的同名namespace会认为是同一个命名空间,不会冲突(5)C++标准库都放在std命名空间中(standard)// bit是命名空间的名字,一般开发中是用项目名字做命名空间名。int val;

2024-09-21 23:11:41 841

原创 6.4排序——归并排序

1.时间复杂度:O(N·logN)2.空间复杂度:O(N)3.稳定性:稳定4.缺点在于需要O(N)的空间复杂度,归并排序更多是解决在磁盘中的外排序问题。

2024-09-12 17:11:47 547

原创 6.3排序——冒泡排序+快速排序

(1)整体综合性能和使用场景都较优(这也是为什么这个排序敢叫快速排序)(2)时间复杂度:o(N·logN)(3)空间复杂度:o(logN)(4)稳定性:不稳定。

2024-09-12 17:10:52 1123

原创 6.2排序——选择排序与堆排序

(1)效率不是很好,实际中很少使用(2)时间复杂度:o(N²)(3)空间复杂度:o(1)(4)稳定性:不稳定。

2024-09-06 20:04:11 287

原创 6.1排序——插入排序与希尔排序

(1)时间复杂度:o(N²)(2)空间复杂度:o(1)(3)稳定性:稳定(4)元素集合越接近有序,算法效率越高(1)希尔排序是对直接插入排序的优化(2)gap>1时是预排序,目的是让数组更接近有序。当gap==1的时候,数组已经接近有序了,此时进行直接插入排序就会很快,性能得到了优化(3) 希尔排序时间复杂度计算难度大,限于本人水平,只能在这里写个结论,大约是o(N^1.3)

2024-09-06 10:25:09 1344

原创 5.4二叉树——经典OJ题

本篇博客手撕几道经典的二叉树OJ题,它们都很好地体现了二叉树中蕴含的题目均已插入超链接,点击即可跳转~

2024-08-31 16:07:02 1218

原创 5.3二叉树——二叉树链式结构实现

的。

2024-08-31 15:22:43 773

原创 5.2二叉树——堆

开始,往前依次遍历,有需要就调整思想:先把小的树调成堆,再逐层往上,不断扩大“堆的势力范围”特点:节点数量多的层调整次数少,节点数量少的层调整次数多。

2024-08-28 10:38:11 1299

原创 5.1二叉树——基本概念梳理

(2)满二叉树(特殊的完全二叉树):每层的节点数都达到最大。

2024-08-25 11:23:17 467

原创 4.2较难的栈和队列OJ

本篇博客来手撕三道稍有难度的栈和队列相关OJ,题目均已插入超链接,点击即可跳转~

2024-08-24 17:56:49 725

原创 4.1栈和队列基本概念+经典OJ题

本篇博客来梳理栈和队列基本概念以及一道经典OJ题,题目已插入超链接,点击即可跳转~

2024-08-22 18:21:02 435

原创 3.2较难的链表OJ

本篇博客来解析三道较有难度的链表OJ题,题目均已插入超链接,点击即可跳转~

2024-08-18 18:14:22 540

原创 3.1链表基本概念+经典OJ题

本篇博客来探讨数据结构当中的链表,并且来手撕一些经典算法OJ题,OJ题已插入超链接,点击可直接跳转~

2024-08-18 09:32:36 645

原创 2.2算法的时间复杂度与空间复杂度——经典OJ

这里需要理清这个算法的时间复杂度,解析如图(设numsSize=N)从示例1不难看出,真实旋转次数是k%numsSize,也就是k%N,从周期的角度就可以理解这一点;每转一次就要把整个数组动一遍,那转k次就要动k*N遍,时间复杂度就出来了,显然不符合题目要求。

2024-08-17 20:05:59 484

原创 2.1算法的时间复杂度与空间复杂度

本篇博客介绍算法的时间复杂度与空间复杂度。

2024-08-17 18:34:35 418

原创 17.贪吃蛇——具体代码实现

本篇博客梳理贪吃蛇小游戏具体的代码实现。

2024-08-12 11:41:20 773

原创 16.贪吃蛇——游戏的核心逻辑与准备工作

在梳理完前置知识之后,就可以正式进入贪吃蛇游戏的设计了,本篇博客梳理游戏的核心逻辑与开始写代码之前的准备工作。

2024-08-11 22:29:07 662

原创 15.贪吃蛇——前置准备知识

函数,枚举,结构体,动态内存管理,预处理指令,链表,WIN32 API等键盘上每个键对应虚拟键值,传给vKey之后,函数通过返回值分辨按键的状态1)最高位=1:说明被按下2)最高位=0:说明是抬起状态3)最低位=1:该按键被按过,否则为0当我们要判断一个按键是否被按过,封装一个宏即可1 : 0)1 : 0)1 : 0)1 : 0)1 : 0)1 : 0)0x11 : 0)?

2024-08-10 17:45:43 673

原创 1.顺序表

本篇博客探讨数据结构当中的顺序表。

2024-07-31 17:16:03 192

原创 14.编译和链接

本篇博客从宏观角度梳理编译和链接。

2024-07-29 16:59:46 306

原创 13.文件操作

本篇博客探讨C语言中的文件操作。

2024-07-29 09:38:56 675

贪吃蛇源码压缩包,读者可自行下载

贪吃蛇源码压缩包

2024-08-12

C语言扫雷游戏代码文件

包含game.h,game.c,test.c

2024-01-23

聊聊C语言的分支与循环

简单介绍一下C语言的分支和循环结构~

2023-12-03

空空如也

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

TA关注的人

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