自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++20概念约束—现代C++模板约束的演进与重构

C++20引入概念(concepts)作为模板参数的编译时约束机制,通过concept关键字定义类型要求,支持原子约束、逻辑组合与嵌套要求,显著提升泛型编程的可读性与错误提示精度。结合requires表达式,可实现对操作、成员类型及返回值的精确验证。概念支持合取(&&)、析取(||)与非(!),并遵循偏序规则进行重载决议,优先选择更受约束的版本。相比旧有的SFINAE机制,Concepts提供更清晰、可维护的接口约束,是现代C++泛型编程的核心基石。

2026-11-07 18:33:40 298

原创 现代C++性能突破:程序编译期的元编程支持

本文系统阐述了C++模板元编程的演进历程,涵盖其背景、核心概念与基础语法,重点解析编译期计算、类型萃取与SFINAE等关键技术。结合C++11至C++20的特性优化,如constexpr、if constexpr、概念(concepts)与模块,展示了如何简化复杂逻辑、提升可读性与编译效率。文章指出,尽管模板元编程带来编译时间长、调试困难等挑战,但其零运行时开销与类型安全优势,使其成为构建高性能泛型库的核心技术,是掌握现代C++高阶开发的必经之路。

2026-11-01 00:01:41 318

原创 Redis持久化机制解析

Redis通过RDB和AOF两种持久化机制防止数据丢失。RDB以快照形式定时备份,恢复快但可能丢数据;AOF记录所有写命令,支持秒级持久化,结合重写机制压缩文件。生产环境推荐混合使用,兼顾性能与可靠性。

2026-10-24 12:29:55 243

原创 Redis为什么这么快?一文读懂Redis数据类型和单线程架构

本文系统介绍了Redis的核心机制:基于多种内部编码优化数据结构,实现内存与性能的平衡;采用单线程模型,依托纯内存访问、非阻塞I/O和避免线程开销,达成每秒万级高性能;同时强调其对命令执行效率的严格要求,确保服务响应及时。理解这些设计原理,是高效使用Redis的基础。

2026-10-18 17:09:14 199

原创 深入理解程序链接与加载—从动静态链接到库加载

本文系统阐述了静态链接与动态链接的原理与实现机制。静态链接在编译时将目标文件和库合并,通过重定位表修正函数地址;而动态链接将链接推迟至运行时,利用全局偏移表(GOT)和位置无关代码(PIC)实现库的共享与灵活加载。ELF格式支持虚拟地址统一编址,进程通过页表映射实现动态库按需加载与内存共享。动态链接通过延迟绑定(PLT)优化性能,提升资源利用率与代码复用性。理解这些机制是掌握程序加载、运行及系统级开发的关键。

2026-10-11 15:15:19 98

原创 编译链接全链路解析:ELF形成到可执行加载的发展历程

本文系统阐述了从源码编译到可执行文件加载的全过程,聚焦Linux下GCC编译链接机制与ELF文件结构。通过分析目标文件(.o)生成、节(Section)与段(Segment)的划分及合并原则,揭示了节头表(链接视图)与程序头表(执行视图)的功能差异。重点解析了.text、.data、.bss、.rodata等关键节的作用,以及ELF格式如何支持动态链接与高效内存加载,为深入理解进程地址空间与运行时机制奠定基础。

2026-10-02 16:57:26 259

原创 Linux动静态库制作使用完整指南

本文详解Linux下静态库(.a)与动态库(.so)的制作与使用。静态库在编译期被完整复制到可执行文件,运行无需依赖;动态库则在运行时由链接器加载,支持多程序共享,节省内存与磁盘空间。通过Makefile实现库的编译打包,结合-I、-L、-l参数完成链接,并探讨了编译与运行时搜索路径差异。静态库部署简单但体积大,动态库便于升级却需正确配置运行路径。理解链接与加载机制是掌握库应用的关键。

2026-09-26 20:48:32 228

原创 HTTPS协议?HTTP从明文传输到加密通信的发展演进

本文系统阐述HTTPS安全机制,指出HTTP明文传输易遭运营商劫持与中间人攻击。通过引入对称加密保障效率、非对称加密实现密钥安全交换,并结合数据指纹与数字签名技术,最终构建出基于证书认证的加密方案。该方案有效解决了身份验证与防篡改问题,实现了通信机密性、完整性和真实性的统一,使HTTPS成为保障互联网信息安全的核心协议。

2026-09-20 00:24:20 401

原创 基于责任链模式的消息队列—异步处理流水线的最佳实践

本文系统阐述了Linux SystemV消息队列的机制与实现,涵盖其通信原理、内核数据结构及核心接口,并通过C++封装实现进程间异步通信。在此基础上,引入责任链模式,构建可扩展的文本处理流水线,实现消息的格式化、持久化与自动备份。二者结合,既解耦了进程通信,又实现了消费逻辑的灵活编排,为异步任务处理提供了高效、可维护的架构方案。

2026-09-13 12:51:33 253

原创 mmap文件映射:构建Linux内核高性能文件I/O的基石

本文介绍了Linux内存映射系统调用mmap,解析其参数、返回值和映射原理,并通过写入映射、读取映射及模拟实现malloc三个实例,展示mmap减少数据拷贝、提升I/O性能的优势,强调其在文件读写、共享内存和内存管理中的核心作用。

2026-09-06 00:46:35 314

原创 搭建brpc工业级C++框架实现远程调用

本文介绍了Apache BRPC框架的安装与使用方法。BRPC是一个高性能、多协议的C++ RPC框架,支持HTTP/2、gRPC、Redis等20多种协议。文章详细说明了安装依赖项(如Protobuf、SSL)和编译BRPC的步骤,并展示了核心功能模块:服务端类、客户端类、HTTP协议支持及定时任务调度。通过一个Echo服务的实现示例,演示了同步和异步调用的编程模式,包括proto文件定义、服务端实现和客户端调用。BRPC内置运维监控页面,提供连接数、QPS等实时指标,适用于构建高性能分布式系统。

2026-08-22 21:11:42 193

原创 如何实现长连接通信机制?Websocket的最佳实践

本文介绍了WebSocket协议及其实现。WebSocket是HTML5提供的全双工通信协议,解决了传统HTTP轮询效率低的问题,适用于即时通讯等实时场景。文章详细解析了WebSocket协议原理、报文格式,并重点介绍了WebSocket++这一C++开源库,包括其核心接口、日志系统和HTTP处理功能。通过一个简单的WebSocket服务器实现示例,展示了如何建立连接、处理消息和HTTP请求。最后通过浏览器客户端测试验证了服务器的回显功能,体现了WebSocket在实时通信中的高效性。

2026-08-15 21:09:26 232

原创 如何快速上手httplib?利用httplib搭建HTTP服务器

cpp-httplib是一个轻量级C++ HTTP库,提供简洁API支持HTTP服务器/客户端开发。文章首先介绍了其主要特性:单头文件设计、跨平台支持、同步/异步操作、HTTP/1.1协议等。随后详细说明了安装步骤,包括下载源码和部署头文件。重点解析了核心接口架构,包含Request/Response数据结构及Server/Client类。通过示例代码展示了如何搭建HTTP服务器处理GET请求、构建静态文件服务,并实现客户端请求功能。该库以极简设计实现完整HTTP通信能力,适合快速开发网络应用。

2026-08-08 19:18:34 201

原创 一文搞定Ubuntu环境部署Docker容器及远程连接

Docker是一个开源的容器化平台,可打包应用及其依赖环境,实现跨平台部署。本文详细介绍了Docker的安装配置流程:包括更新系统、安装依赖、配置官方仓库、安装核心组件等步骤,并验证安装结果。重点演示了如何基于Ubuntu容器搭建C++开发环境(安装编译器、库和SSH服务),通过端口映射实现远程连接开发。Docker解决了环境一致性问题,使开发部署更高效可靠,其容器化技术正重塑软件开发流程。

2026-08-01 19:17:25 256

原创 极差不超过定值的最长子数组—滑动窗口+deque线性优化

本文探讨了如何寻找最长连续子数组,使得其任意两元素绝对差不超过给定限制值limit。通过将问题转化为维护滑动窗口内的极差,提出了基于双端队列(deque)的高效算法。算法使用两个单调队列分别动态维护窗口的最大值和最小值,确保极差始终≤limit。左指针在窗口不合法时移动,右指针逐步扩展窗口,时间复杂度为O(n)。该解法是滑动窗口与单调队列结合的经典应用,适用于各类动态数据统计问题。

2026-07-25 16:16:06 248

原创 基于Cache替换算法的LRU缓存实现

LRU(最近最少使用)是一种缓存替换算法,通过淘汰最久未使用的数据来管理有限缓存空间。本文介绍了LRU缓存的实现方法:结合双向链表和哈希表,前者维护数据访问顺序(最近访问移至头部),后者提供O(1)的快速查找。具体实现中,get操作通过哈希表定位数据并调整链表位置;put操作更新或新增数据,若缓存满则删除尾部最久未用数据。这种结构完美平衡了快速访问和时序维护的需求,时间复杂度均为O(1),被广泛应用于多级存储系统中。

2026-07-18 15:32:00 266

原创 快速选择算法求解TopK:基于快排的思维跃迁

本文介绍了快速选择算法用于高效求解数组中第k大元素的问题。该算法基于快速排序思想,通过选择基准值将数组分区,仅递归处理包含目标的那一侧,将时间复杂度优化至O(n)。文章详细阐述了算法原理、图解过程和代码实现,重点说明了升序分区策略和递归终止条件,并指出该算法在数据量大时相比排序和堆方法更具优势,适用于数据库、机器学习等大规模数据处理场景。

2026-07-11 16:34:42 408

原创 全排列—回溯剪枝的决策树艺术

本文介绍了解决包含重复数字的全排列问题的回溯剪枝算法。核心思路是:1) 先排序数组使相同元素相邻;2) 通过回溯构建决策树生成所有排列;3) 关键剪枝策略要求相同元素必须按数组原始顺序选取以避免重复排列。文章详细解析了算法实现,包括排序预处理、回溯搜索过程以及visited数组标记已用元素的剪枝条件。该方法通过固定重复元素的选取顺序实现高效去重,掌握这一排序+回溯+剪枝的方法论可推广解决各类排列组合问题。

2026-07-05 18:24:06 450

原创 二维前缀DP求解矩阵区域和

本文介绍了利用二维前缀和求解矩阵区域和问题的方法。给定m×n矩阵mat和整数k,需要为每个位置(i,j)计算以它为中心、边长为2k+1的正方形区域元素和(边界超出时截断)。解法核心是构建前缀和矩阵dp,其中dp[i][j]表示从(0,0)到(i-1,j-1)的矩形和,通过容斥原理递推计算:dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + mat[i-1][j-1]。查询时再次应用容斥原理,用四个前缀和O(1)求出目标区域和。

2026-06-27 17:09:34 280

原创 最长重复子串:哈希+二分优化算法

本文介绍了求解字符串中最长重复子串的两种方法。暴力枚举法通过双重循环检查所有子串,时间复杂度为O(n^3),效率较低。优化方法采用哈希+二分策略:利用重复子串长度的单调性进行二分查找,每次检查时用哈希集合存储指定长度的所有子串,若发现重复即返回。该方法将时间复杂度优化至O(NlogN),是处理此类字符串问题的有效方案。文章详细说明了两种方法的实现步骤和复杂度分析,突出了哈希+二分算法在效率上的显著优势。

2026-06-21 15:47:15 207

原创 深入剖析B树系列—MySQL索引背后的外查找大师

本文系统介绍了B树及其变种B+、B*树、B树的原理与实现。B树是一种多路平衡搜索树,通过降低树高减少磁盘I/O次数,适用于海量数据存储场景。文章详细解析了B树的节点结构、查找算法和插入操作,重点阐述了插入时的分裂机制。B+树在B树基础上优化,将数据集中在叶子节点并形成链表,提升范围查询效率;B树通过提高节点填充率进一步优化空间利用率。最后探讨了B树系列在MySQL索引中的应用,对比了MyISAM和InnoDB存储引擎的索引实现差异。

2026-06-14 13:36:43 363

原创 图的高阶算法:从构造最小生成树到求解最短路径问题

本文系统介绍了图论中的两类核心算法:最小生成树和最短路径算法。最小生成树部分详细解析了Kruskal算法(基于全局贪心策略,使用并查集检测环路)和Prim算法(基于局部贪心策略,逐步扩展生成树)的实现原理和代码实现。最短路径部分深入剖析了三种典型算法:Dijkstra算法(处理非负权图的单源最短路径)、Bellman-Ford算法(支持负权边检测的单源最短路径)以及Floyd-Warshall算法(动态规划解决多源最短路径问题),分别阐述了它们的适用场景、核心思想和具体实现。

2026-06-06 16:33:40 267

原创 MySQL进阶:吃透表的CURD操作&深入理解索引

本文系统介绍了MySQL数据库表的增删改查(CURD)操作及索引优化技术。主要内容包括:1. 表的CRUD操作:详细讲解了CREATE、INSERT、SELECT、UPDATE、DELETE等基本操作,以及WHERE条件查询、结果排序、分页筛选等高级用法。2. 函数应用:介绍了日期、字符串和数学三类常用函数的使用方法。3. 复合查询:涵盖单表/多表查询、自连接、子查询等复杂查询技术。4. 内外连接:解析了内连接、左外连接和右外连接的区别与应用场景。5. 索引原理与优化:深入剖析了B+树索引结构。

2026-05-26 23:07:55 437

原创 I/O多路复用:基于epoll实现Reactor高性能TCP服务器

本文系统介绍了Linux下的I/O多路复用技术及其在构建高性能网络服务器中的应用。主要内容包括: I/O多路复用技术演进 select:使用位图管理文件描述符,存在数量限制和性能线性下降问题 poll:改用pollfd结构体数组,突破数量限制但仍需线性扫描 epoll:采用红黑树管理描述符和就绪链表,实现O(1)时间复杂度的事件通知 Reactor设计模式 事件驱动架构,通过事件循环监听和处理I/O事件 将I/O操作与业务逻辑解耦,提高并发处理能力 基于epoll实现高效的事件通知机制 服务器实现 分层架构

2026-05-13 14:59:41 588

原创 HTTP协议深度解析—从HTTP原理到手写实现服务器

本文深入解析HTTP协议原理并实现了一个完整的HTTP服务器。首先介绍了HTTP协议的基本概念,包括URL结构、请求/响应格式、HTTP方法和状态码。然后详细阐述了服务器架构设计,包含网络通信、日志系统、线程安全等核心模块。通过C++实现了一个支持静态文件服务和动态路由的多进程服务器,能够处理GET/POST请求、重定向、错误页面等功能。最后展示了前端页面实现,包括登录注册表单、404错误页面等。该项目从底层socket编程到上层HTTP协议处理,系统性地构建了一个可扩展的Web服务器框架。

2026-04-30 20:47:41 990 2

原创 一文读懂TCP通信机制:基于相关API构建可靠性连接

本文介绍了基于Linux的TCP通信实现,重点讲解了socket相关API接口和EchoServer回显服务器的开发过程。文章首先阐述了TCP与UDP的区别,详细说明了socket、bind、listen、accept、connect等核心API的使用方法。然后通过一个完整的EchoServer项目,展示了TCP通信的具体实现,包括common基础设施模块、mutex线程同步模块、log日志系统模块、inetaddr网络地址封装类以及tcpserver核心功能模块的实现。

2026-04-19 20:01:39 423

原创 Linux网络:基于协议栈原理实现UDP通信

本文系统介绍了Linux网络通信的实现原理,重点阐述了基于UDP协议的套接字编程方法。文章首先解析了TCP/IP四层网络模型,详细说明了各层功能及协议封装流程,包括IP地址与端口号的标识作用。然后深入讲解了Socket编程接口,包括socket创建、bind绑定、sendto/recvfrom收发等关键系统调用。通过一个完整的UDP通信实例,展示了客户端与服务端的实现过程:客户端通过命令行参数获取服务器地址,循环收发消息;服务端采用多线程安全设计,整合日志模块记录运行状态。

2026-04-11 21:29:24 657

原创 Linux系统收官篇:线程学习的一些心得总结

本文深入探讨了Linux系统编程中的多线程技术。首先介绍了线程的基本概念及其相较于进程的优势,包括更低的创建开销和更高的通信效率。随后详细讲解了线程控制相关API,如创建、终止、等待和分离线程。针对线程同步问题,文章分析了互斥锁和条件变量的实现原理,并给出了封装示例。此外,还介绍了生产者消费者模型和线程池的实现方法,包括环形队列和单例模式的应用。最后总结了线程作为轻量级进程的特点,强调其在提升程序并发性能方面的重要性,同时指出需要谨慎处理同步和数据竞争问题。

2026-04-06 14:46:04 431

原创 浅入深出吃透Linux信号底层机制—从原理到实战的一大步

本文深入探讨了Linux系统中的信号机制,从信号的基本概念、处理方式到具体实现原理进行了系统分析。信号作为进程间异步通信的软中断机制,其生命周期包括产生、阻塞、未决和递达四个阶段。文章详细介绍了信号的三种处理方式(忽略、默认动作和自定义捕捉),并通过代码示例演示了终端按键、系统命令和函数调用等多种信号产生方式。同时,深入解析了信号集操作函数、信号屏蔽机制以及信号捕捉过程,特别说明了SIGCHLD信号在避免僵尸进程方面的应用。通过分析信号在内核态与用户态之间的传递机制,揭示了操作系统实现异步控制流劫持的原理。

2026-03-27 02:17:18 449

原创 Linux进程间通信IPC:从管道到共享内存的发展演进

本文介绍了Linux系统中的两种进程间通信(IPC)机制:管道和共享内存。管道分为匿名管道(用于有亲缘关系的进程)和命名管道(可用于无亲缘关系的进程),通过文件描述符实现单向数据流传输。共享内存则是最高效的IPC方式,直接映射同一块物理内存,避免了内核数据拷贝。文章详细阐述了两种机制的系统调用接口、实现原理和使用场景,并通过具体代码示例展示了父子进程间管道通信和独立进程间共享内存通信的实现过程。最后指出管道适合小数据传输,共享内存适合高性能需求,二者共同构成了Linux进程通信的基础。

2026-03-21 19:07:43 416

原创 深入理解Linux文件系统:从基础IO到文件重定向

本文深入探讨了Linux文件系统的核心机制,重点分析了文件I/O操作、系统调用与文件描述符的关系。文章首先阐述了一切皆文件的设计理念,指出Linux将各类硬件设备和资源都抽象为文件对象。随后详细介绍了文件描述符的分配规则、系统调用接口(open/read/write等)与库函数的区别,并通过代码示例演示了文件操作、重定向的实现原理。特别对dup2系统调用实现文件描述符重定向的机制进行了剖析,解释了输出重定向的本质是修改文件描述符指向。最后总结了Linux统一文件接口的设计优势。

2026-03-14 16:53:15 447

原创 基于进程控制替换原理的自定义Shell实现

本文介绍了Linux中进程替换的原理及exec系列函数的用法,并基于此实现了一个自定义shell。主要内容包括:1. 进程替换原理:通过exec函数加载新程序替换当前进程;2. exec系列函数详解(execl/execlp/execle/execv/execvp/execve)的功能区别与使用场景;3. 自定义shell的实现原理与关键模块:命令行解析、进程创建与替换、环境变量管理、内置命令处理等。通过这个简单shell的实现,展示了操作系统命令行解释器的工作原理,为理解系统编程和并发处理提供了基础。

2026-03-07 21:19:54 448

原创 Linux深入理解进程&手写实现进程控制

本文深入解析了Linux进程的生命周期与管理机制。首先介绍了进程的基本概念,指出进程是程序执行的实例和系统资源分配的基本单位,其核心是task_struct数据结构。详细阐述了进程创建(fork系统调用)、状态转换(运行、睡眠、僵尸、孤儿等状态)和优先级调整机制。重点分析了僵尸进程的危害及进程等待(wait/waitpid)的资源回收方法,通过代码示例展示了阻塞与非阻塞等待的实现。文章还探讨了进程地址空间的虚拟特性,解释了父子进程共享代码但数据独立的现象。最后总结了进程作为操作系统核心抽象的重要意义。

2026-03-01 22:57:22 658

原创 版本控制器git及gdb调试技巧深度剖析

本文介绍了Git版本控制和gdb调试工具的使用方法。主要内容包括:1. Git的安装配置及如何将本地代码推送到Gitee平台,详细说明了从创建仓库到代码推送的全过程;2. gdb调试器的基本使用方法,包括调试模式设置、常用调试命令介绍,以及增强版cgdb工具的使用;3. 阐述了Git和gdb在项目开发中的重要性,Git作为代码"时光机"管理版本迭代,gdb作为"显微镜"进行代码调试,二者结合可实现高效的代码管理。文章为开发者提供了实用的技术指导,帮助提升代码管理和调试

2026-02-19 22:19:38 724

原创 Linux自动化构建make/Makefile—项目开发必备

本文介绍了Linux项目开发中make/Makefile工具的使用方法及其在进度条实现中的应用。主要内容包括:1. make/Makefile的基本语法、文件依赖关系和清理操作;2. 通过预处理、编译、汇编过程分析Makefile的执行原理;3. 利用回车换行符(\r\n)和行缓冲区特性实现命令行进度条;4. 开发了两个版本的进度条程序,展示了Makefile自动化构建的优势。文章强调Makefile能显著提升开发效率,是实现大型项目自动化构建的重要工具。

2026-02-14 17:55:05 800 1

原创 C++11进阶—在拥挤和变化的世界中茁壮成长

本文详细介绍了C++11标准引入的核心新特性,包括可变参数模板、emplace系列接口、lambda表达式、包装器function、bind适配器、异常处理机制和智能指针等。通过具体代码示例展示了这些特性的使用方法,并深入分析了其底层实现原理。特别强调了智能指针(unique_ptr、shared_ptr、weak_ptr)在资源管理方面的优势,以及如何解决循环引用问题。文章还探讨了C++11异常处理机制的改进和线程安全问题。这些新特性使C++成为更安全、更现代的编程语言,显著提升了代码的健壮性和可维护性。

2026-01-30 20:27:29 654

原创 C++11新特性:现代C++的文艺复兴

本文介绍了C++11引入的几个重要新特性:1)列表初始化实现了统一初始化方式,支持所有对象用{}初始化;2)右值引用通过区分左值和右值,支持移动语义,减少了不必要的拷贝;3)移动语义通过移动构造和移动赋值提高了资源利用效率;4)引用折叠规则解决了模板参数推导中的引用问题;5)完美转发保持了参数传递时的值类别不变。这些特性共同推动了C++向现代编程语言的转变,提高了代码效率和表达能力,为后续C++发展奠定了基础。

2026-01-14 20:44:50 710 1

原创 哈希实现&封装unordered系列容器

本文介绍了基于哈希桶实现的unordered_set和unordered_map容器。哈希桶通过链表处理冲突,使用素数扩容策略减少冲突。详细阐述了哈希桶的构造、析构、迭代器实现及find/insert/erase等核心操作。unordered_set和unordered_map通过封装哈希桶实现,其中unordered_map额外实现了operator[]操作。相比红黑树实现的set/map,哈希实现的容器具有O(1)的平均时间复杂度,在查找效率上更具优势。

2026-01-01 22:09:36 1129

原创 红黑树实现—规则&约束的平衡之道

本文系统介绍了红黑树的结构特性与实现方法。红黑树作为平衡二叉搜索树,通过颜色约束规则(根节点为黑、无连续红节点、路径黑节点数相同)实现近似平衡,其查找效率为O(logN)。重点阐述了红黑树的插入操作,详细分析了三种处理情况:单纯变色、单旋+变色和双旋+变色。文章还提供了结点结构定义、查找、结点数统计、高度计算、中序遍历以及平衡性检查等核心功能的实现代码,并通过测试用例验证了实现的正确性。相比AVL树,红黑树以稍宽松的平衡条件换取更少的旋转操作,在实践中应用更为广泛。

2025-12-20 21:49:50 703

原创 AVL树结构实现—高效算法的“平衡大师“

本文系统介绍了AVL树的结构特性与实现原理。AVL树作为平衡二叉搜索树,通过控制左右子树高度差不超过1来保持平衡,其查找、插入时间复杂度均为O(logN)。文章详细解析了AVL树的结点结构、查找、中序遍历等基础操作,重点阐述了插入操作的平衡因子更新规则和四种旋转调整策略(左单旋、右单旋、左右双旋、右左双旋)。通过代码实现和性能测试验证了AVL树的高效性,10万数据插入仅需0.1秒,查找仅79毫秒,树高保持在19层,充分展现了AVL树动态平衡的优势。

2025-12-08 22:09:31 975

空空如也

空空如也

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

TA关注的人

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