- 博客(71)
- 收藏
- 关注
原创 C++ 波澜壮阔 50 年:从 C with Classes 到现代 C++ 的进化史诗
C++经过四十余年发展,从“C with Classes”演进至现代C++,核心里程碑包括标准化(C++98)和现代范式革新(C++11至C++20)。学习推荐使用cppreference.com和经典三部曲:《C++ Primer》掌握语法、《STL源码剖析》深入泛型设计、《Effective C++》习得工程实践。命名空间(namespace)通过域隔离解决命名冲突,使用时需遵循“头文件禁用using、源文件局部展开、优先显式限定”原则。初学应通过`iostream`和域限定符理解编译器查找逻辑,避免全
2025-11-24 08:15:00
1776
82
原创 算法闯关日记 Episode :解锁链表新副本——破解「相交」迷局与「回文」谜题
本文详细讲解了两个经典链表问题:相交链表与回文链表的解决方案。对于相交链表问题,通过计算链表长度差,使双指针从相同相对位置开始遍历,实现O(n)时间复杂度的高效查找。对于回文链表问题,提出两种解法:基于数组的快速验证法,以及结合快慢指针寻找中间节点与链表反转的空间优化解法。两种方法分别适用于不同场景,后者尤其满足了O(1)空间复杂度的要求。文章通过图解和代码示例,清晰展示了指针操作的关键技巧,帮助读者掌握链表问题的核心解决思路。
2025-11-24 08:15:00
534
25
原创 数据结构排序系列指南:从O(n²)到O(n),计数排序如何实现线性时间复杂度
在排序算法的世界中,计数排序以其独特的"非比较"特性脱颖而出。作为一种基于"统计与映射"思想的排序方法,计数排序彻底颠覆了传统比较排序的思维模式,通过巧妙利用数据本身的数值特征来实现排序,在特定场景下能够达到惊人的线性时间复杂度O(n)。本文将从计数排序的核心理念切入,深入剖析其"以数为据"的本质,详细讲解从基础统计到映射定位的完整实现过程,对比不同场景下的空间优化策略,并通过实战代码展示其在实际应用中的价值,帮助你彻底掌握这种高效而独特的排序算法。
2025-11-21 07:41:59
1272
126
原创 【数据结构初阶系列】归并排序全透视:从算法原理全分析到源码实战应用
归并排序采用分治思想,通过递归或迭代实现稳定高效的排序。算法将数组拆分为最小单元后合并,保证O(n log n)时间复杂度。递归实现直观体现分治逻辑,非递归版本通过gap步长控制合并过程,避免递归开销,更适合大规模数据。关键要处理好序列边界条件,确保合并正确性。这一经典算法是理解计算机算法设计与性能分析的优秀范例。
2025-11-18 10:35:17
1254
147
原创 【数据结构】排序详解:从快速排序分区逻辑,到携手冒泡排序的算法效率深度评测
文章通过详尽的图示和代码实例,深入剖析了各算法的实现细节与性能特征。特别针对256位数字排序等特殊场景,分析了算法选择的考量因素。最终通过多维度对比,揭示了在工程实践中如何根据数据规模、性能要求和实现复杂度进行算法选型的智慧,为开发者提供了完整的排序算法应用指南。
2025-11-14 16:17:45
2085
165
原创 【数据结构初阶】--从“最小值筛选”到代码落地,解锁选择排序的核心思想!
在排序算法的修仙世界中,选择排序一脉两大功法——“直接选择排序”与“堆排序”,为争夺“终极话事人”之位展开激烈论道。直接选择排序以朴素思想为核心,通过线性遍历选取极值,实现简单却受限于O(N²)效率;而堆排序凭借“堆”结构的内力加持,将极值选取优化至O(log N),以稳定的O(N log N)性能傲视群雄。本文从思想本质、实现源码到性能特性进行全面对比,最终揭晓谁能执掌选择排序之牛耳,并深入探讨不同场景下的算法选择哲学。这场功法之争不仅展现了算法优化的精妙路径,更启示我们:理解本质,方能万法归宗。
2025-11-08 10:39:18
901
193
原创 【数据结构初阶】--从排序算法原理分析到代码实现操作,参透插入排序的奥秘!
在排序算法的修仙世界里,插入排序一脉有两大宗门:"直接宗"稳扎稳打,"希尔宗"另辟蹊径。本文将以趣味修仙视角,带你深入探讨直接插入排序与希尔排序的核心原理与性能表现。通过时间复杂度、空间复杂度、稳定性等多维度对比,结合完整代码实现与图解,最终揭晓谁才是插入排序家族中真正的"效率王者"。无论你是算法新手还是修炼多年的程序"道友",都能在这场排序算法的论道中收获新的感悟。
2025-11-06 08:30:00
1129
140
原创 《数据结构风云》:二叉树遍历的底层思维>递归与迭代的双重视角
本文围绕二叉树遍历展开,先强调其是树结构操作基础与算法设计核心。接着详解 LeetCode 上前、中、后序遍历真题的 C 语言实现,包括节点计数、数组开辟、递归存储等步骤,指出易错点。还介绍牛客网根据前序字符串重建二叉树并中序遍历的实现。最后总结遍历规律与关键技术,助力读者深化对递归和树结构的理解,为复杂算法学习奠基
2025-11-02 13:27:33
1006
137
原创 《数据结构风云》递归算法:二叉树遍历的精髓实现
**本文系统解析二叉树四大核心算法:单值验证、树结构比对、子树探测与镜像对称。通过递归分治的思维,层层拆解问题本质,提供清晰的解决路径与代码实现。这不仅是一次算法技巧的传授,更是编程思维的锤炼。后续将深入回溯、动态规划等进阶领域,助你在编程修行路上不断突破。**
2025-11-01 09:26:23
1566
117
原创 【数据结构】感受递归暴力美学:链式二叉树全方位剖析(附源码)
链式二叉树是数据结构中递归思想的完美体现。本文通过前序、中序、后序遍历的递归实现,深入解析二叉树的结构特性与操作逻辑。从节点统计、深度计算到层序遍历,每个操作都展现了递归将复杂问题分解为相似子问题的精髓。掌握链式二叉树不仅是为了理解一种数据结构,更是培养递归思维、为学习更复杂树形结构奠定基础的关键一步。
2025-10-29 08:30:00
1299
140
原创 【数据结构】《自此,每一个想考我堆排序(Top-k问题)的面试官,下场都很尴尬【附完整代码实现】》
堆是一种基于完全二叉树、满足特定顺序性的关键数据结构。本文系统性地探讨了堆的核心实现,包括初始化与销毁、入堆与出堆的核心操作及其关键支撑算法——向上与向下调整。在此基础上,深入剖析了堆排序算法的高效实现,厘清了“真”、“假”堆排序的本质区别与性能差异。进而,将堆的应用延伸至经典的Top-K问题,通过对比建堆算法的优劣,展现了其在海量数据处理中的强大威力。全文从结构实现到算法应用,层层递进,揭示了堆如何将简单的有序性转化为高效的解决方案。
2025-10-22 19:37:29
1931
133
原创 【数据结构入坑指南(七.1)】--《附带图解,深入解析孩子兄弟表示法:处理复杂树结构的终极方案》
本文系统讲解了数据结构中的树形结构。从树的基本定义、形象结构入手,详细解释了节点、度、深度等20+个核心术语。通过孩子兄弟表示法等实例,剖析了树的逻辑结构与实际应用(如文件系统)。进而深入介绍了二叉树、满二叉树、完全二叉树等概念及其特性,并对比了顺序与链式两种存储结构的优劣与应用场景,为学习高级数据结构奠定坚实基础。
2025-10-18 18:04:53
1262
97
原创 【数据结构入坑指南(六)】--《从初始化到销毁:手把手教你打造健壮的队列实现》
本文基于C语言,采用链表结构从零实现队列。详细剖析队列“先进先出”的核心原理,完整讲解初始化、入队、出队、销毁等关键操作,提供可运行的完整代码示例。内容承接栈知识,为后续学习二叉树与堆奠定坚实基础。
2025-10-16 22:01:55
2019
118
原创 【数据结构入坑指南(五)】--《手把手实现栈结构:附带完整代码与注释,深度揭秘数组实现香在哪?》
本文是数据结构与算法系列第五讲,全面讲解栈(Stack)这一重要数据结构。文章从栈的"后进先出"(LIFO)核心特性出发,深入解析栈的基本概念与操作,并通过C语言完整实现栈结构。在内容安排上,首先详细阐述栈的定义和结构特点,分析为何数组实现比链表更具优势。接着逐步实现栈的初始化、销毁、入栈、出栈、取栈顶元素等核心功能,每个操作都配有完整的代码示例和逻辑解析。最后提供可直接运行的完整代码,包含头文件定义、功能实现和测试案例。
2025-10-15 10:55:19
1350
64
原创 【数据结构入坑指南(四.1)】--《超越单链表:双链表“哨兵位”设计模式,让边界处理代码优雅又健壮》
本文完整实现了双链表的所有核心功能,并借助“哨兵位”提升了代码的健壮性。至此,对链表的探索告一段落。接下来,我们将进入一个规则至上的世界,学习在“先进后出”和“先进先出”规则下运作的栈与队列,体验一种截然不同的数据管理哲学。
2025-10-14 09:50:36
1361
72
原创 【数据结构入坑指南(四.2)】--《从单链到双链的进阶,读懂“双向奔赴”的算法之美与效率权衡》
在掌握单链表的基础上,本文带你步入双向链表的进阶学习。我们将聚焦其核心的“双指针”结构,详解如何通过prev和next指针实现数据的双向链接,并动手实现“哨兵位”初始化、头尾插删等关键操作,让你直观感受其在插入与删除效率上的显著提升。
2025-10-12 14:17:20
1762
95
原创 《链表面试基础看点:这里不止“快慢指针”的完美实现,更懂“哨兵节点”的巧妙运用》
链表面试两大高频基础题精讲:手把手教你用“快慢指针”无懈可击地寻找中间节点,以及用“哨兵节点”优雅地合并两个有序链表。一次性夯实双指针应用的核心场景。
2025-10-09 19:52:44
1465
74
原创 《一招吃透链表操作:三指针反转法,面试遇到链表题再也不慌!》
本文通过精讲力扣203「移除链表元素」与206「反转链表」两道经典题目,深入解析了「多指针协作」、「尾插建新表」与「三指针原地反转」等核心解法。文章从思路演进、代码实现到边界处理,全方位拆解如何将单链表理论知识转化为解决实际问题的能力,旨在帮助读者夯实算法基础,从容应对技术面试。
2025-10-08 10:26:48
1622
38
原创 【数据结构入坑指南(三.2)】--《剑指Offer:单链表操作入门——从“头删”开始破解面试》
单链表的学习至此已全面掌握!我们从首节点的“头删”起步,逐一攻克了在指定位置插入、删除以及查找、销毁等所有核心操作。这不仅深化了对指针和动态内存管理的理解,更让我们亲身体验了其“不连续存储”带来的增删优势。然而,单链表单向遍历的局限性也显而易见。为了在效率与功能上寻求更优解,我们的征程将进入下一站:双向链表。它将如何以空间换时间,实现更灵活的操作?让我们共同揭开新篇章。
2025-10-06 10:48:00
1212
66
原创 《算法面试“必杀技”:双指针法高效解决数组原地操作》
本文聚焦算法面试中的高频考点——数组的原地操作。针对删除有序数组重复项、移除特定元素及合并两个有序数组这三道经典题目,我们摒弃了低效的暴力解法,深入剖析了双指针法这一通用且高效的解决方案。文章将结合清晰的图解,一步步拆解双指针(快慢指针、对撞指针)的核心思想、移动逻辑与关键的边界条件处理,帮助你从根本上理解其如何将时间复杂度优化至O(n),并掌握用单一方法解决一类问题的能力,为应对技术面试打下坚实基础。
2025-10-04 15:21:36
1674
49
原创 【数据结构入坑指南(三.1)】--《面试必看:单链表与顺序表之争,读懂“不连续”之美背后的算法思想》
针对顺序表插入删除低效、扩容耗损等缺陷,单链表通过指针链接实现物理上非连续、逻辑上连续的动态存储。本文详解单链表的核心结构,并从头尾插删等基础操作入手,完整实现其增删功能,为学习更复杂的数据结构奠定基础。
2025-10-03 11:08:53
1918
59
原创 【数据结构入坑指南(二.2)】--《从数组到动态顺序表:数据结构与算法如何优化内存管理?》
本文详细介绍了动态顺序表的核心操作实现,重点分析了头部插入、尾部删除、指定位置查找、插入与删除等关键算法。通过完整的代码示例展示了动态扩容机制、元素移位策略和内存管理技术,深入剖析了顺序表在时间复杂度与空间复杂度上的平衡策略,为理解线性表的连续存储特性提供了实践基础。
2025-09-29 10:22:11
968
41
原创 【数据结构入坑指南(二.1)】--《数据结构与算法精讲:从数组到顺序表,如何让数据管理变得强大而优雅?》
本篇是「数据结构与算法」系列的核心篇章,聚焦于线性表的基础实现——顺序表。文章将带领读者从零开始,在C语言环境中亲手实现一个动态顺序表,深度剖析其底层结构、三文件编程模式 与关键的 动态扩容 机制。通过实现尾插等操作,您将直观理解时间复杂度/空间复杂度分析在评价数据结构性能中的实际应用,为后续学习更复杂的数据结构打下坚实的实践基础。
2025-09-29 10:22:07
1283
110
原创 #C语言——刷题攻略:牛客编程入门训练(十三):一维数组(二),轻松拿捏!
本文分享了四个C语言一维数组的编程练习题解:1)BC120通过冒泡排序获取前五名;2)BC121判断序列是否有序(升序或降序);3)BC123在有序序列中插入整数并保持有序;4)BC124删除序列中的指定数字。解题思路包括数组排序、双标志位判断有序性、插入元素时的数组移位操作,以及通过continue跳过指定元素实现"删除"效果。这些基础练习适合C语言初学者,后续会逐步提升题目难度。文章采用代码+注释+思路解析的形式呈现,最后鼓励读者一起学习交流。
2025-09-22 21:11:07
589
23
原创 【数据结构入坑指南(一)】--《实战:暴力解VS最优解——一道轮转数组题引发的复杂度「血案」》
《数据结构与算法入门指南》文章重点讲解了复杂度分析,包括时间复杂度和空间复杂度的计算方法,详细说明了大O渐进表示法的使用规则。通过力扣189题(轮转数组)的三种解法对比,展示了如何通过复杂度评估算法优劣,其中最优解法达到了O(N)时间复杂度和O(1)空间复杂度。文章最后指出数据结构与算法在校园招聘中的重要性,并预告后续将继续分享相关内容。适合C语言初学者
2025-09-22 11:06:38
1353
48
原创 #C语言——学习攻略:攻克 预处理(下),根本不在话下!
本文介绍了C语言预处理指令:1. #和##运算符:#用于参数字符串化,##实现符号拼接生成新标识符;2. #undef移除宏定义及命令行编译参数设置;3. 条件编译的4种形式(单分支/多分支/定义判断/嵌套指令);4. 头文件包含机制:区分""与<>的查找策略,通过#ifndef或#pragma once解决重复包含问题;5. 其他指令如#error、#line等。文章通过代码示例演示了宏函数模板、调试代码控制等实用技巧,强调预处理在工程
2025-09-17 18:03:14
1864
69
原创 #C语言——学习攻略:攻克 预处理(上),根本不在话下!
本文详解C语言的预处理指令。介绍#define定义常量和宏的使用方法。主要内容包括:1)预定义符号如__FILE__、__LINE__的使用;2)#define定义常量的命名约定和注意事项;3)宏定义的正确写法,强调括号对优先级的影响;4)带副作用宏参数的风险分析;5)宏替换规则;6)宏与函数的对比,指出宏在效率上的优势及在调试、安全性上的不足。通过实例代码演示常见错误及修正方法,帮助初学者掌握预处理指令的核心要点。
2025-09-17 17:59:05
977
37
原创 #C语言——学习攻略:攻克 编译与链接,根本不在话下!
本文介绍C程序从源代码到可执行文件完整编译过程,重点解析了翻译环境中的四个关键阶段:预处理(处理宏定义和头文件)、编译(词法/语法/语义分析)、汇编(生成机器指令)、链接(合并目标文件)。文章通过具体代码示例展示了变量声明、函数调用的链接原理,并对比了不同操作系统的目标文件格式差异。最后简要说明了程序运行环境的内存管理机制,包括堆栈使用和静态变量存储。全文为C语言初学者提供了清晰的编译流程框架和技术细节,有助于深入理解程序构建原理。
2025-09-14 16:41:49
1116
38
原创 #C语言——学习攻略:攻克 文件操作内容(二),根本不在话下!
本文介绍了C语言文件操作的相关函数,顺序读写函数(fprintf、fscanf、fwrite、fread) 字符串格式化函数(sprintf、sscanf) 文件的随机读写函数(fseek、ftell、rewind) 文件缓冲区及fflush函数的使用 更新文件的三种模式(r+、w+、a+)的特点和使用场景 文章通过函数原型说明、参数解释、示例代码等方式详细讲解了各个文件操作函数的使用方法,并强调了文件操作中缓冲区管理的重要性。最后还提供了相关系列文章的回顾链接,方便读者系统学习C语言
2025-09-13 16:16:43
2132
54
原创 #C语言——学习攻略:攻克 文件操作内容(一),根本不在话下!
本文介绍了C语言中文件操作的基础知识,包括文件类型(程序文件和数据文件)、文件名结构、二进制与文本文件的区别。重点讲解了文件的打开(fopen)和关闭(fclose)操作,以及顺序读写函数如fputc、fgetc、fputs、fgets的使用方法。文章还涉及文件指针、标准流(stdin/stdout/stderr)的概念,并通过代码示例演示了如何实现文件的读写操作,最后介绍了feof和ferror函数用于检测文件状态。这些内容是C语言文件操作的基础,适合初学者系统学习。
2025-09-13 16:13:22
1994
56
原创 #C语言——刷题攻略:牛客编程入门训练(十三):循环输出图形(二)、一维数组(一),轻松拿捏!
本文分享了7道C语言编程题目的解法,涵盖图形输出和数值计算两类。图形题包括金字塔、翻转金字塔、菱形和K形图案的打印,重点讲解了变量控制和循环嵌套的逻辑处理。数值题涉及数字计数、多组数据累加以及最高最低分差值计算,展示了变长数组和缓冲区数据读取的应用。所有题目均来自牛客网编程入门训练,适合C语言初学者巩固基础算法思维和编程能力。通过循序渐进的练习,帮助读者逐步提升编程水平。
2025-09-12 20:45:48
1223
20
原创 #C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(四)、循环输出图形(一),轻松拿捏!
本文分享了牛客网7道基础题目解析,包括进制转换、回文数判断和图形输出等题型。重点讲解了六进制转换的实现思路、回文数重建技巧以及利用嵌套循环控制图形输出的方法。每道题都提供完整代码和解题思路,帮助初学者掌握循环控制、取余运算等基础编程技能。文章适合C语言初学者巩固基础,通过刷题提升编程能力。
2025-09-12 20:45:42
1476
39
原创 #C语言——刷题攻略:牛客编程入门训练(十):攻克 循环控制(三),轻松拿捏!
本文分享了C语言编程题,涵盖数字统计、成绩计算、水仙花数判断、数组处理等常见题型。每道题都提供了牛客网链接和完整代码,重点分析了易错点和关键算法,如:使用循环取余逆序输出数字、通过标志位判断水仙花数、利用数组处理多组输入数据等。这些题目适合C语言初学者练习基础编程能力,帮助掌握循环、条件判断、数组操作等核心知识点。
2025-09-10 19:39:56
2044
29
原创 #C语言——刷题攻略:牛客编程入门训练(九):攻克 循环控制(二),轻松拿捏!
本文介绍牛客网编程入门训练中7道循环控制题目。包括:乘法表输出(双重循环)、数列求和(正负交替)、分数数列求和、复杂数列求和、数位之和计算(处理负数)、魔法数字变换(奇偶处理)等。每道题都给出了关键解题思路,如循环嵌套设计、变量赋值技巧、绝对值处理方式等,并强调了对循环条件和变量作用域的注意事项。文章适合编程初学者学习基础循环结构的应用,通过具体实例掌握循环控制的核心要点。
2025-09-09 21:04:42
960
22
原创 #C语言——学习攻略:攻克 动态内存分配、柔性数组,根本不在话下!
本文介绍了C语言中动态内存管理。主要包括:1. malloc/free函数、 calloc/realloc函数特点及应用场景;2. 柔性数组的特点及优势;3. 程序内存区域的划分。文章通过代码示例详细演示了动态内存分配的正确使用方法,并针对常见错误给出了修改建议,特别强调了内存泄漏防范和指针管理的重要性。最后对比了不同实现方式的性能差异,为C语言开发者提供了实用的内存管理指南。
2025-09-09 19:22:45
1234
27
原创 #C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
本文是C语言编程刷题合集,主要包含7个题目解析:1)一元二次方程求解(考虑复数解和符号问题);2)家长判断条件题;3)四则运算计算器(处理除零错误);4)循环输出祝福语;5)高斯公式求和;6)奇偶数统计;7)三位数质数判断(优化算法)。文章通过具体代码展示解题思路,涉及基础语法、数学公式应用和算法优化技巧,适合编程新手学习参考。
2025-09-08 15:02:24
1072
18
原创 #C语言——学习攻略:攻克 自定义类型路线--联合体、枚举类型,根本不在话下!
本文介绍了C语言中联合体和枚举类型的使用。联合体(共用体)的特点是所有成员共用同一内存空间,其大小至少是最大成员的大小,并通过示例演示了联合体的内存共享特性。枚举类型用于列举所有可能取值,枚举常量默认从0开始递增,具有增加代码可读性、便于调试等优点。文章还通过计算器案例展示了枚举的实际应用,并对比了枚举与#define定义常量的区别。最后强调了对这些自定义类型需要多次回顾学习的重要性。
2025-09-08 10:19:35
896
16
原创 #C语言——学习攻略:自定义类型路线--结构体--结构体类型,结构体变量的创建和初始化,结构体内存对齐,结构体传参,结构体实现位段
本文详细介绍了C语言中结构体的相关知识点,包括结构体类型声明、创建与初始化、特殊声明、自引用等基础内容。重点讲解了结构体内存对齐规则及其计算方式,通过多个习题演示了嵌套结构体大小的计算过程,并分析了内存对齐的底层原因。文章还探讨了结构体传参的优化方法,以及位段的概念、内存分配、跨平台问题及应用场景。最后提醒了位段使用中的注意事项。本文内容丰富,适合C语言初学者系统学习结构体的核心概念和实际应用,建议读者多次回顾以加深理解。
2025-08-13 09:44:02
1204
3
原创 #C语言——刷题攻略:牛客编程入门训练(八):分支控制(二)
本文分享了牛客网C语言编程入门训练的7道分支控制题目解析,涵盖健康评估、找最大数、数字整除判断、统计正负数、网购计算、快递费用和商品打折等基础题型。通过示例代码详细讲解解题思路,重点介绍了flag变量控制、小数处理技巧、分支条件判断等编程方法。文章针对每道题给出完整代码实现,并标注关键解题技巧,适合C语言初学者巩固分支结构知识,提升实际问题解决能力。
2025-08-10 13:59:03
836
1
原创 #C语言——刷题攻略:牛客编程入门训练(七):分支控制(一)-- 涉及 %c前加空格:忽略起首的空白字符
本文分享了C语言初学者在牛客网刷题的7个基础练习,涵盖分支控制结构。主要内容包括:1)kiki算数(处理两位数加法);2)及格分数判断;3)奇偶性判断;4)元音辅音识别(注意%c输入格式);5)数值范围判断;6)字母判断;7)季节判断(两种实现方式)。每道题都附有解题思路和代码示例,特别提醒了字符输入时的格式处理技巧。文章最后还提供了相关刷题系列的回顾链接,适合编程新手巩固基础语法和逻辑思维能力。
2025-08-09 16:45:16
974
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅