自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AVL树详解

本文总结了AVL树的核心概念与实现要点: AVL树通过平衡因子和旋转操作保持高度平衡,避免BST退化为单支树,确保O(logN)时间复杂度。 平衡因子_bf定义为右子树高度减左子树高度,合法范围为[-1,0,1],绝对值超过1时需旋转调整。 AVL插入流程分两步:先按BST规则插入,再从父节点向上更新平衡因子,遇到失衡(|_bf|=2)时进行旋转。 四种旋转情况(LL/RR/LR/RL)及其处理逻辑是核心难点,特别是双旋后平衡因子的特殊调整。 代码实现包含结点结构、插入逻辑、旋转操作和验证方法,强调调试技巧

2026-06-18 13:30:26 231

原创 Linux 入门详解:从环境搭建、常见指令到权限理解

本文是一份Linux入门学习指南,涵盖Linux背景介绍、环境搭建、常用命令、权限管理、软件安装等核心内容。文章首先阐述了学习Linux的必要性,对比了Linux与Windows系统的差异,并指出Linux在服务器领域的主导地位。随后详细介绍了Linux的历史渊源、开源文化及常见发行版。在环境搭建部分,推荐使用云服务器配合XShell远程登录的方式学习。最后列出Linux"一切皆文件"的设计哲学和倒树状目录结构特点,为后续命令学习奠定基础。本教程适合零基础学习者入门,也可作为开发者的Linux基础速查手册。

2026-06-10 17:55:10 463

原创 C++ STL 中 map 和 set 详解:从使用到红黑树底层理解

1 2 3 8 10这个写法经常用来对数组或 vector 进行排序去重。容器存储模型key 是否唯一是否有序是否支持[]常见用途setkey唯一有序不支持排序、去重、判断存在multisetkey可重复有序不支持排序、保留重复元素mapkey-value唯一按 key 有序支持字典、计数、映射关系multimapkey-value可重复按 key 有序不支持一个 key 对应多个 valueset 只有 key,key 唯一。

2026-06-10 17:30:06 426

原创 C++ 继承详解:从语法到底层原理,一文搞懂面向对象复用

C++继承机制详解 本文系统讲解了C++面向对象编程中的继承机制,主要内容包括: 继承概念:通过继承实现代码复用,子类自动获得父类成员,避免重复编码。 继承语法:使用public/protected/private三种继承方式,控制基类成员在派生类中的访问权限。 对象切片:允许派生类对象赋值给基类对象,但会"切掉"派生类特有成员,反之则不允许。 作用域规则:基类和派生类是独立作用域,同名成员会隐藏而非覆盖。 成员函数调用顺序:构造/析构函数遵循"先基类后派生类"的顺序。 多继承问题:重点讨论了菱形继承带来的

2026-06-03 22:09:13 229

原创 C++ 模板进阶详解:从非类型参数到特化、偏特化与分离编译

它们在底层大量使用了模板——事实上,STL 几乎就是建立在模板之上的。// 类型模板参数——我们最熟悉的形式这类模板的参数都是类型——你可以传intdoublestring等任意类型。然而,模板能做的事情远不止这些。能不能传一个整数常量作为模板参数?——非类型模板参数能不能对某些特殊类型做特殊处理?——模板特化为什么 STL 的源码几乎都在头文件里?——分离编译问题里的N为什么不能是变量?这些问题,就是本文要回答的。本文特点:课堂源码对齐。

2026-05-14 12:27:48 412

原创 C++ list 详解:从入门到模拟实现,彻底搞懂双向链表

在 C++ 的 STL 中,vector统一了"动态数组"的天下,但它并非万能。当我们需要频繁在容器中间位置插入或删除元素时,vector 每次都要移动大量元素,O(n) 的时间复杂度让人头疼。这时,std::list应运而生。list是 STL 中的双向链表容器,它在底层维护了一个带头双向循环链表任意位置的插入和删除都是 O(1)。理解list,不仅能让你在合适的场景下做出正确的容器选择,还能帮你深入掌握链表这种经典数据结构在工业级代码中的实际运用。本文特点:分层讲解。

2026-05-07 21:46:58 258

原创 C++ vector 详解:从入门到模拟实现,一文搞懂动态数组

C++ vector 动态数组详解 本文系统讲解C++标准库中的vector容器,涵盖以下核心内容: 基本概念:vector是动态数组,提供连续存储空间,支持自动扩容和高效尾部操作 构造方式:包括默认构造、指定大小构造、拷贝构造、迭代器范围构造等 迭代器操作:正向/反向迭代器遍历,四种常见遍历方法比较 容量管理:size()、capacity()、reserve()、resize()等关键接口 元素访问:at()、operator[]、front()、back()等访问方式 修改操作:push_back()

2026-05-02 16:36:37 403

原创 深入理解 C++ STL string:从接口使用到底层模拟实现

本文介绍了C++中string类的核心概念和使用方法。首先对比了C语言字符串与C++ string的区别,指出string将数据与操作封装成类更安全方便。然后解析了string的本质是basic_string<char>的别名,是一个模板类实例。重点讲解了string的构造函数、容量接口(resize/reserve)以及三种访问方式:下标访问、迭代器访问和范围for循环。文章通过代码示例详细说明了各接口的使用场景和注意事项,如resize会改变字符串长度可能触发扩容,而reserve仅预留空间

2026-04-25 23:21:24 489

原创 C++内存管理+模板初尝试:暴风雨前的尝试

C/C++内存管理主要分为栈、堆、数据段和代码段等区域。C语言通过malloc/calloc/realloc/free进行动态内存管理,其中malloc仅分配空间,calloc会初始化清零,realloc可调整内存大小。C++则通过new/delete操作符管理内存,new会调用构造函数,delete调用析构函数。new底层通过operator new实现,可能调用malloc,失败时抛出异常;delete则通过operator delete释放内存。定位new表达式可在已分配内存上构造对象,常用于内存池优

2026-04-13 12:41:03 407

原创 类与对象:这个类也有自己的对象

本文摘要: 本文主要介绍了面向对象编程中的类与对象概念,重点对比了面向过程和面向对象的区别。文章详细讲解了类的定义方式、访问限定符、封装特性以及类的作用域,并通过实例说明了类的实例化过程。在类对象模型部分,分析了三种可能的存储方式,并通过实践验证了编译器实际采用的存储方案。最后,文章探讨了结构体内存对齐规则和this指针的工作原理,解释了成员函数如何区分不同对象调用的问题。全文系统性地介绍了C++中类的基础知识,为理解面向对象编程提供了坚实基础。

2026-04-12 12:26:55 389

原创 从C到C++:一脚踹开面向对象的大门

C++命名空间与函数特性摘要 命名空间通过定义新的作用域来避免命名冲突,支持嵌套定义和同名合并。使用时可通过域限定符、特定成员导入或直接导入整个命名空间。C++输入输出使用流对象cin/cout,能自动识别类型并跳过空白字符。缺省参数允许函数参数指定默认值,需遵循右到左顺序且不能同时在声明和定义中出现。函数重载通过参数类型、个数或顺序的差异实现同名函数功能扩展,其原理在于编译时的名称修饰机制。这些特性共同增强了C++的类型安全性和代码组织能力。

2026-03-27 16:55:19 491

原创 排序:万物皆有序

本文系统介绍了常见排序算法及其实现。主要内容包括:1)排序基本概念,如稳定性、内部/外部排序;2)插入排序(直接插入和希尔排序)的原理与实现,分析其时间复杂度;3)选择排序(简单选择和堆排序)的算法流程及特性比较;4)交换排序(冒泡和快速排序)的实现方法,重点讲解快速排序的hoare版本。文章通过代码示例和图示详细展示了各排序算法的执行过程,并总结了时间复杂度、空间复杂度和稳定性等关键特性。不同排序算法适用于不同场景,理解其原理对优化程序性能具有重要意义。

2026-03-22 18:09:36 449

原创 二叉树:从栽树到“摆烂”,再到递归“成神”的那些事儿

本文介绍了树和二叉树的基本概念、结构特性及存储方式。主要内容包括:1)树的定义、相关术语(节点度、叶节点、层次等)及四种表示方法;2)二叉树的特殊类型(满二叉树、完全二叉树)及其性质;3)二叉树的顺序存储(适合完全二叉树)和链式存储结构;4)堆的概念(大/小根堆)及其调整算法。重点阐述了树形结构的层次性、递归特性以及不同存储方式的适用场景,为后续树形数据结构的应用奠定理论基础。

2026-03-16 10:31:22 392

原创 栈和队列:先进先出、先进后出

本文介绍了栈和队列两种数据结构的基本概念、实现方法及相关应用。栈是后进先出(LIFO)的线性表,可用数组或链表实现,重点讲解了压栈、出栈操作及判空等函数。队列是先进先出(FIFO)结构,通常用链表实现,详细说明了入队、出队操作及循环队列的实现原理。最后列举了4道相关面试题,包括括号匹配、栈与队列相互实现、循环队列设计等实际问题,并简要分析了解题思路。文章通过代码示例和图示,清晰地展示了这两种数据结构的核心特性和典型应用场景。

2026-03-05 13:11:15 418

原创 顺序表、链表,以及那道让人头秃的“随机链表复制”

本文介绍了线性表的基本概念和顺序表的实现。线性表是n个相同特性元素的有限序列,包括顺序表、链表等结构。顺序表通过数组存储元素,分为静态和动态两种类型。文章详细讲解了动态顺序表的实现,包括初始化、销毁、扩容、头尾插入删除等操作,并提供了相关代码示例。此外,还通过两个算法题(移除元素和删除有序数组重复项)展示了顺序表的实际应用,给出了C和C++两种解法。整体内容涵盖了线性表和顺序表的基础知识及实践应用。

2026-02-28 16:36:59 568

原创 数据结构:算法的时间复杂度和空间复杂度

文章摘要: 本文介绍了算法效率的衡量标准——算法复杂度,包括时间复杂度和空间复杂度。时间复杂度通过大O渐进表示法估算基本操作执行次数,常见案例包括冒泡排序O(N²)、二分查找O(logN)和斐波那契递归O(2^N)。空间复杂度衡量算法运行时临时占用存储空间,如冒泡排序O(1)和动态数组O(N)。文中通过具体代码示例详细讲解了不同算法复杂度计算方法和推导过程,并强调实际应用中通常关注最坏情况下的复杂度表现。

2026-02-03 23:55:45 677 1

原创 C语言编译系统构建全流程解析:从源程序到可执行映像的翻译环境与预处理机制研究

本文详细介绍了C程序的翻译环境和执行环境。翻译环境包括编译和链接两个阶段,其中编译又分为预处理、编译和汇编三个步骤。预处理会进行宏展开、头文件包含等操作;编译包括词法、语法和语义分析;汇编则将代码转为机器指令;链接则合并目标文件和库文件。执行环境涉及程序加载、运行和终止过程。文章还深入讲解了预处理指令#define的用法,包括定义常量、宏、带副作用的参数等,并对比了宏与函数的优缺点。最后介绍了#和##运算符的特殊用法,用于字符串化和符号连接。通过本文可以全面了解C程序从源代码到可执行文件的完整生命周期。

2026-01-31 19:41:11 655

原创 C语言中的“文件恋爱学”:从流表白到读写分手,再到判定终点的那些事儿

文章摘要:本文介绍了文件的基本概念、分类及操作方式。文件分为程序文件和数据文件,数据文件又可分为文本文件和二进制文件。文件操作通过文件指针实现,使用fopen和fclose函数进行打开和关闭。文章详细讲解了顺序读写函数如fgetc/fputc和fgets/fputs的使用方法,并通过示例代码演示了文件读写操作。最后还介绍了流的概念,包括标准输入输出流stdin/stdout/stderr。

2026-01-28 17:04:50 587

原创 C语言内存管理:从malloc/free到柔性数组

本文介绍了C语言中动态内存管理的核心概念和方法。主要内容包括:1)静态内存分配的局限性,强调动态内存分配的必要性;2)详细讲解malloc、calloc和realloc三种动态内存分配函数的使用方法及区别;3)分析常见的动态内存错误,如空指针解引用、越界访问、错误释放等;4)通过典型笔试题演示常见的内存管理陷阱。文章强调动态内存使用的基本原则:谁申请谁释放、释放后置空指针、避免内存泄漏等,为正确使用动态内存提供了实用指导。

2026-01-23 15:44:39 747

原创 结构体、联合和枚举:从基础语法到内存布局与高级应用

本文详细介绍了C语言中结构体的相关内容。首先讲解了结构体的声明方式、变量创建和初始化方法,包括嵌套结构体的使用。重点分析了结构体内存对齐规则,通过示例说明如何计算结构体大小,并解释了内存对齐的必要性(提升性能但牺牲空间)。此外还介绍了结构体的自引用、位段声明、修改默认对齐数等特殊用法。最后对比了结构体传参的两种方式,推荐使用指针传参以提高效率。文章内容全面,涵盖了结构体的主要知识点,适合C语言学习者系统掌握结构体的使用。

2026-01-19 14:27:55 600

原创 深入理解C语言内存操作函数:memcpy、memmove、memset、memcmp的用法与实现

本文介绍了四种内存操作函数的使用与实现方法:1)memcpy用于非重叠内存区域的字节复制;2)memmove处理可能存在重叠的内存复制,通过判断重叠情况选择从前向后或从后向前复制;3)memset以字节为单位设置内存值,但需注意整型数组的设置效果;4)memcmp比较两个内存区域的前num个字节。文章详细讲解了各函数的功能特点、使用场景和模拟实现代码,并配有示意图说明其工作原理。特别强调了memcpy与memmove在处理重叠内存时的区别,以及memset设置整型数组时的注意事项。

2026-01-16 15:33:35 449

原创 字符函数和字符串函数:C 语言文本处理的核心工具箱

本文介绍了C语言中常用的字符串操作函数及其模拟实现。主要内容包括:1) strlen函数用于计算字符串长度;2) strcpy实现字符串拷贝;3) strcat完成字符串拼接;4) strcmp进行字符串比较;5) strncpy、strncat、strncmp等带长度限制的安全版本函数;6) strstr查找子串位置。文章详细说明了每个函数的使用方法、注意事项,并提供了指针、计数器和递归等多种模拟实现方式,帮助深入理解字符串操作原理。

2026-01-14 17:34:50 716

原创 指针:访问与操纵内存的艺术

本文介绍了C语言中指针的核心概念与应用。首先解释了内存管理的基本原理,包括内存单元的划分、地址与指针的关系。然后详细讲解了指针变量的定义和使用,包括取地址操作符(&)和解引用操作符()的使用方法。文章还分析了指针变量的大小与平台的关系,以及不同类型指针在解引用和地址运算时的差异。同时介绍了void指针的特殊用途和const修饰指针的不同效果。最后重点讨论了野指针的成因及规避方法,并简要介绍了assert断言的使用。全文系统性地阐述了指针的基础知识,为后续深入学习指针的高级应用奠定了基础。

2026-01-08 19:57:47 631

原创 数据在内存中的“形态学”:整型存储、字节序架构与浮点编码的特殊约定

本文探讨了整数和浮点数在内存中的存储方式。整数以补码形式存储,便于统一处理符号位和加减运算。大小端字节序决定了多字节数据的存储顺序,可通过简单程序检测系统采用的模式。浮点数按IEEE 754标准存储,分为符号位、指数和有效数字三部分,其中指数采用偏移值表示,有效数字默认省略前导1。文章通过多个代码示例展示了不同数据类型的存储特点,包括用%d打印无符号数、%u打印有符号数以及浮点数的存取规则,深入解析了计算机系统中数值存储的底层原理。

2025-12-25 12:03:18 547

原创 胡凡算法入门篇精选题解(二·散列篇):高效的映射魔法

本文介绍了散列(Hash)的基本概念和应用。散列通过哈希函数将数据映射到固定范围的整数,实现O(1)时间复杂度的查找和插入操作。基础应用包括字符出现次数统计、字符存在性判断和整数统计。进阶应用扩展了字符范围,并介绍了2-SUM问题的解法。关键点包括哈希表设计策略、无符号字符处理以及精确映射与ASCII直接映射的选择。通过示例代码展示了如何利用散列高效解决各类统计和查询问题。

2025-12-23 22:11:50 540

原创 胡凡算法入门篇精选题解(二·排序篇):经典的简单排序

本文介绍了三种经典排序算法:简单选择排序、直接插入排序和qsort函数的使用。简单选择排序通过不断选择剩余元素的最小值进行排序,时间复杂度为O(n²),空间复杂度O(1),但不稳定。直接插入排序将数组分为有序和无序区,逐步将元素插入正确位置,时间复杂度平均O(n²),最好情况O(n),是稳定排序。文章还提供了二分查找和哨兵两种优化版本。最后介绍了qsort函数的使用方法,包括整数、浮点数和字符串的比较函数编写规范。这三种算法各具特点,适用于不同场景的数据排序需求。

2025-12-20 15:18:36 540

原创 结构体:程序员的第一块“自留地”

本文介绍了C语言结构体的基本概念和使用方法。主要内容包括:结构体的声明与初始化(含匿名结构体)、结构体的自引用方式(需使用指针避免无限递归)、结构体成员的访问(通过.和->操作符)以及结构体传参的最佳实践(推荐传递指针以减少栈开销)。文章通过代码示例演示了结构体的定义、初始化和访问方式,并强调了在结构体自引用时应避免使用匿名结构体,在参数传递时应优先选择指针传参以提高性能。

2025-12-18 10:58:49 277

原创 胡凡算法入门篇精选题解(三):字符串处理与校验的核心模板精讲

本文介绍了三种字符串处理算法:回文字符串判断、单词内部逆序和求公共前缀。对于回文字符串,采用对称比较法或双指针法;单词逆序通过逐个字符反转实现;公共前缀则需先确定最短字符串长度,再逐字符比较。每种方法都给出了C语言实现代码,并指出了常见错误,如缓冲区溢出、数组越界等注意事项。文章还提供了相关算法博客链接供深入学习。这些基础算法在字符串处理中具有广泛应用,掌握它们能有效提升编程能力。

2025-12-16 16:29:33 622

原创 操作符:程序世界的语法工具箱

本文系统介绍了C语言中的操作符分类及使用方法,重点讲解了算术、赋值、单目、逻辑、条件等操作符的特性。详细分析了移位操作符的运算规则,并解释了原码、反码、补码的概念及其在计算机中的存储方式。通过代码示例演示了各操作符的实际应用,包括前置/后置自增运算、逻辑运算的短路特性等。同时补充了二进制与其他进制转换的基础知识,为理解位运算提供了必要前提。全文深入浅出地讲解了C语言操作符的核心概念和使用技巧。

2025-12-15 21:36:47 958

原创 胡凡算法入门篇精选题解(二):日期与进制转换的核心技巧精讲

本文总结了日期处理和进制转换两大算法的核心模板。日期处理部分包括:每月天数初始化、闰年判断、日期加减运算、一年中天数计算、日期比较以及星期映射规则处理。进制转换部分重点介绍了字符转数字规则和十进制转K进制的"除基取余法",通过不断除K取余并逆序排列得到结果。这些模板可以灵活应用于各类相关问题,是算法实现的重要基础。

2025-12-15 09:27:39 204

原创 胡凡算法入门篇精选题解(一):从单调序列到图形输出的综合实践

本文介绍了三种重要算法问题的解决思路:1)判断单调序列的两种方法(计数法和标志位法);2)快速幂算法及其应用,通过二进制分解和平方递推高效计算大数幂运算;3)图形打印的基本模板,并以等腰直角三角形为例说明规律。每种方法都配有代码实现和详细解析,展示了算法思维在不同场景下的应用技巧。

2025-12-12 08:33:10 290

原创 数组:编程世界里的收纳大师

今天,我们来看看数组。

2025-12-10 10:27:51 878

原创 编程中的函数哲学:封装、调用与自我迭代

本文系统介绍了C语言中函数的相关知识。首先阐述了函数的基本概念,指出函数是一段完成特定任务的代码块,具有封装和复用特性。其次讲解了库函数的使用方法,包括标准库介绍、头文件包含和实践操作。然后详细说明了自定义函数的语法形式、形参与实参的区别、函数调用方式(传值调用和传址调用)以及return语句的使用注意事项。此外,还介绍了数组作为函数参数的传递规则,以及嵌套调用和链式访问两种函数调用方式。最后强调了函数声明的重要性,确保函数在被调用前已正确定义或声明。通过具体代码示例,全面展示了C语言函数的使用方法和注意事

2025-12-07 12:29:52 830

原创 分支与循环:选择向左,循环向右

C语言本身就是结构化的程序设计语言,分支与循环的结构包括,接下来围绕着这个结构,我们来开始相关内容的学习。

2025-12-03 18:05:34 735

原创 关于C语言的基础见识

C语言相关的基础知识

2025-12-01 00:46:54 1000

空空如也

空空如也

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

TA关注的人

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