- 博客(38)
- 收藏
- 关注
原创 链式二叉树OJ问题详解
本文介绍了二叉树相关的OJ题目解法,包括单值二叉树判断、相同树比较、对称二叉树验证等基础问题。重点讲解了三种遍历方式(前序、中序、后序)的递归实现方法,并详细说明了翻转二叉树和平衡二叉树的判断逻辑。所有解法均采用递归思想,通过辅助函数处理节点值和子树关系。文章强调递归在解决二叉树问题中的重要性,并指出在不受空间限制时,创建新树是解决翻转等问题的有效方法。最后提示这些基础问题的解法将为后续排序算法学习奠定基础。
2026-03-19 20:28:26
535
9
原创 【初阶数据结构11】——链式二叉树知识补充
本文介绍了二叉树的核心操作实现,主要包括层序遍历、完全二叉树判断、创建与销毁等内容。层序遍历通过队列实现广度优先搜索;完全二叉树的判断依据层序遍历中空节点的出现位置;二叉树的创建采用前序递归方式,销毁则采用后序遍历确保安全释放内存。文章还补充了二叉树的基本性质,如第i层最多2^(i-1)个节点、n0=n2+1等关系。这些操作为后续二叉树OJ题解奠定了基础,展示了二叉树处理的关键技术和方法。
2026-03-19 17:37:22
451
14
原创 【初阶数据结构10】——链式二叉树的功能实现
本文介绍了二叉树的链式存储结构及其基本操作。主要内容包括:1. 二叉树链式结构的概念与实现,使用左右指针表示节点关系;2. 三种遍历方法(前序、中序、后序)的递归实现;3. 常见功能实现,如计算节点数、叶子节点数、树高度、第k层节点数和查找特定值节点。通过手动创建二叉树示例,阐述了递归遍历的核心思想,并给出了各功能的优化实现方案。文章为后续学习更复杂的二叉树操作奠定了基础。
2026-03-17 20:07:02
395
4
原创 【初阶数据结构09】——对堆用法的深入刨析
本文详细解析了堆的两种核心调整函数(向上调整和向下调整)及其应用。通过分析堆的构建方法(向上调整建堆O(nlogn)和更高效的向下调整建堆O(n)),阐述了堆排序的实现原理(升序建大堆,降序建小堆)。最后介绍了TopK问题的两种解决方案,重点展示了基于小堆的高效实现方法,该方法通过维护K大小的堆来降低内存需求,时间复杂度为O(nlogk)。文章为堆结构的实际应用提供了清晰的技术指导。
2026-03-14 17:36:01
600
12
原创 【初阶数据结构08】——树的基本概念与堆的基本功能实现
本文系统介绍了树结构及其在计算机科学中的应用,重点讲解了二叉树和堆的实现原理。首先阐述了树的基本概念、术语和存储方式,然后深入分析了二叉树的定义、性质及存储结构。针对堆这一特殊完全二叉树,详细说明了其定义、存储结构及核心操作(向上/向下调整),并给出了小堆的动态实现代码。最后介绍了堆排序算法,包括建大堆、交换堆顶元素和调整堆的过程,分析其O(nlogn)的时间复杂度。全文通过理论与代码结合的方式,帮助读者掌握树结构、堆实现及堆排序的核心知识。
2026-03-12 21:06:25
497
13
原创 栈与队列OJ问题详解
本文精选了4道栈与队列的经典算法题,包括:1)括号匹配问题,利用栈的后进先出特性验证括号有效性;2)用两个队列实现栈,通过元素转移保持后进先出顺序;3)用两个栈实现队列,通过入栈和出栈的配合模拟先进先出;4)设计循环队列,利用数组和取模运算实现环形缓冲区。每道题目都包含思路分析和C语言实现代码,帮助深入理解栈和队列的特性及其应用场景,为后续学习更复杂的数据结构打下基础。
2026-03-12 09:33:41
425
12
原创 【初阶数据结构07】——栈与队列的代码实现与解析
本文详细介绍了栈和队列两种基本数据结构。栈采用后进先出(LIFO)原则,通过动态数组实现,包含初始化、入栈、出栈等核心操作接口。队列遵循先进先出(FIFO)原则,使用链表结构实现,提供了入队、出队等基本功能。文章还简要提及循环队列的概念,并强调这两种结构在算法设计中的重要性。所有实现均采用C语言编写,代码完整可运行,适合数据结构初学者学习实践。
2026-03-10 20:26:19
571
4
原创 链表经典OJ问题详解
本文精选了10道链表经典题目,涵盖删除节点、反转链表、中间节点、倒数第k节点、合并有序链表、链表分割、回文判断、相交链表、环形链表检测等常见操作。通过详细的思路分析和C语言代码实现,重点讲解了快慢指针、哑结点等核心技巧的应用。每道题目都配有在线练习链接,帮助读者掌握链表操作的关键技术点,包括指针处理、边界条件判断等。文章强调链表题目虽然变化多样,但核心在于理解其非连续存储特性,通过系统练习可以提升算法思维,为学习更复杂的数据结构打下坚实基础。
2026-03-06 23:00:39
558
15
原创 【初阶数据结构06】——时间复杂度空间复杂度详解与例题分析
本文系统介绍了算法复杂度分析方法,重点阐述了时间复杂度和空间复杂度的概念及其应用。通过多个实例(如冒泡排序、二分查找、递归算法等)详细演示了如何计算和表示算法复杂度,并对比了不同复杂度级别的性能差异。文章还结合面试真题和OJ练习题(消失数字、旋转数组),展示了复杂度分析在实际编程和面试中的重要性。最后强调,掌握复杂度分析是编写高效代码和应对技术面试的基础技能,建议开发者根据具体场景选择最优算法,兼顾时间与空间效率。
2026-03-04 21:34:20
599
10
原创 【初阶数据结构05】——双向链表专题
本文详细介绍了带头双向循环链表的实现方法。通过引入哨兵位和双向指针,这种链表结构简化了边界条件处理,实现了O(1)时间复杂度的头尾操作。文章系统讲解了节点定义、初始化、插入删除等核心操作的实现原理,并提供了完整的C语言代码示例。相比单链表,双向链表虽然增加了内存开销,但显著提升了操作效率,是处理线性数据的强大工具。最后指出在实际应用中需要根据需求权衡数据结构的选择。
2026-03-03 13:09:00
906
5
原创 【初阶数据结构04】——单链表应用
本文通过单链表经典算法OJ题和通讯录实现案例,深入讲解了单链表的应用。第一部分解析了移除链表元素、反转链表、合并有序链表等6个经典算法题的解题思路和代码实现。第二部分基于单链表重新实现通讯录系统,展示了链表在动态数据管理中的优势,并与顺序表版本进行对比分析。文章通过实践案例帮助读者掌握链表操作技巧,理解指针操作思维,为学习更复杂的数据结构打下基础。下期预告将介绍带头双向循环链表这一更高效的链表变种。
2026-03-02 19:17:26
990
3
原创 【初阶数据结构03】——单链表专题
本文介绍了单链表的基本概念、实现方法及其与顺序表的对比。单链表通过指针连接独立节点,实现动态存储,解决了顺序表插入删除效率低的问题。文章详细讲解了单链表的节点结构、创建、增删改查等操作函数实现,并对比了带头/不带头、单向/双向、循环/非循环等链表类型。单链表适合频繁修改数据的场景,而顺序表更适合随机访问。掌握单链表是学习更复杂数据结构的基础,后续可基于单链表实现通讯录等应用。
2026-02-15 13:02:04
703
原创 【初阶数据结构02】——顺序表的应用
本文通过实现通讯录系统展示了动态顺序表的实际应用。系统采用动态顺序表存储联系人信息,实现增删改查等核心功能,并支持数据持久化。在实现过程中,文章探讨了顺序表的经典算法,如元素移除和有序数组合并。同时分析了顺序表的局限性:插入删除效率低、扩容成本高和空间浪费等问题,并指出链表等数据结构可解决这些缺陷。最后强调在实际开发中应根据需求选择合适的数据结构,顺序表虽简单高效但存在局限,为后续学习链表等更复杂的数据结构奠定基础。
2026-02-09 21:23:24
640
1
原创 【初阶数据结构01】——顺序表专题
本文系统介绍了顺序表这一基础数据结构,从静态/动态两种实现形式展开讲解。重点剖析了动态顺序表的实现原理,包括初始化、销毁、插入(表头/表尾/指定位置)、删除和查找等核心操作,并提供了完整的代码实现。文章通过数组对比突出了顺序表"动态扩容"的特点,分析了其随机访问快但中间操作慢的优缺点。最后预告了基于顺序表实现通讯录的实战项目,帮助读者将理论知识转化为实践能力。全文循序渐进,既讲解了数据结构概念,又提供了可落地的代码实现,为后续更复杂数据结构的学习打下坚实基础。
2026-02-06 21:29:38
876
1
原创 D22—C语言预处理详解:从宏定义到条件编译
本文深入解析C语言预处理机制,重点介绍了预处理指令的多种应用场景。主要内容包括:预定义符号(__FILE__等)的使用、#define定义常量和带参宏的注意事项、条件编译的多种形式(#ifdef/#ifndef等)、头文件包含策略以及#和##运算符的特殊用法。文章特别强调宏定义中括号使用和副作用参数的陷阱,对比了宏与函数的优缺点,并提供了调试宏、跨平台兼容等实用技巧。通过系统讲解预处理规则和最佳实践,帮助开发者编写更高效、可维护的C代码,同时避免常见错误。
2026-02-03 20:32:35
843
1
原创 D21—C语言编译与链接详解:从源代码到可执行程序
本文详细解析了C语言程序从源代码到可执行文件的完整编译过程。首先介绍了翻译环境和执行环境的概念,重点阐述了翻译环境中的预处理、编译、汇编和链接四个阶段:预处理阶段处理宏定义和头文件包含;编译阶段进行词法分析、语法分析和代码优化;汇编阶段生成机器指令;链接阶段合并目标文件和库文件。文章通过具体示例展示了每个阶段的转换过程,并解释了目标文件格式、符号解析和重定位等关键技术。最后总结了程序加载运行时的内存布局和执行流程,为深入理解C程序构建原理提供了系统性的指导。
2026-02-01 20:15:37
818
1
原创 D20—C语言文件操作详解:从基础到高级应用
摘要:本文系统介绍了C语言文件操作的核心知识,包括文件类型(文本/二进制)、基本操作流程(打开-读写-关闭)以及关键函数使用。重点讲解了顺序读写和随机读写方法,详细说明了fopen、fclose、fseek等函数的使用场景及注意事项。文章还深入分析了文件缓冲区机制及其优化策略,并提供了错误处理和性能优化的实用建议。通过对比文本与二进制文件的存储差异,结合具体代码示例,帮助开发者掌握文件持久化存储的技术要点,为数据处理、日志记录等场景提供可靠解决方案。
2026-01-31 22:38:15
853
1
原创 D19—C语言动态内存管理全解:从malloc到柔性数组
本文系统介绍了C语言动态内存管理的核心内容,包括malloc/free基础函数、calloc/realloc高级用法、常见错误及解决方案。重点分析了动态内存分配的必要性、内存区域划分、柔性数组特性等关键概念,并提供了经典笔试题解析和最佳实践建议。文章强调动态内存管理的灵活性优势,同时指出内存泄漏、越界访问等常见陷阱,帮助开发者掌握高效安全的内存管理技术。通过理论讲解与代码示例相结合,全面提升了读者对C语言动态内存分配的理解和应用能力。
2026-01-29 22:16:00
1030
原创 D18—C语言联合体和枚举详解:共用内存与类型安全
本文详细介绍了C语言中联合体(union)和枚举(enum)两种自定义数据类型。联合体允许多个成员共享同一内存空间,有效节省内存,文章通过实例演示了其声明方式、内存特点、大小计算规则,并给出了判断大小端等实际应用场景。枚举类型则用于定义一组有意义的整型常量,相比#define更具可读性和类型安全性。文章比较了结构体和联合体的内存差异,分析了枚举常量的默认值和赋值规则,并提供了使用建议:联合体适用于节省内存和类型转换场景,枚举适用于状态码定义和参数限制。掌握这两种类型有助于提高代码质量和内存效率。
2026-01-27 19:42:39
614
1
原创 D17—C语言结构体详解:从声明、对齐到位段应用
本文全面介绍了C语言结构体的核心知识,包括结构体声明、变量创建与初始化、匿名结构体、自引用等基础概念。重点讲解了结构体内存对齐规则及其计算方式,分析了内存对齐的原因和优化技巧。文章还探讨了结构体传参的最佳实践(优先传指针)以及位段(bit-field)的特殊用法、内存分配特性和应用场景。最后总结了结构体设计和使用建议,强调在跨平台开发中需谨慎使用位段。这些知识对系统编程、嵌入式开发等领域尤为重要,有助于编写高效健壮的C程序。
2026-01-27 19:19:46
853
原创 D16—C语言内功之数据在内存中的存储
本文深入探讨了C语言中数据在内存中的存储方式,重点讲解了整数补码存储、大小端字节序判断以及浮点数的IEEE754标准。通过原理解析和代码示例,展示了整数补码转换、大小端检测程序实现,以及浮点数存储格式的特殊规则。文章还包含5个典型练习题的详细解析,帮助读者巩固对数据类型转换、内存访问等概念的理解。掌握这些底层存储知识对编写高效、跨平台的C程序至关重要,特别是在涉及底层操作和数据序列化的场景中。
2026-01-25 16:27:27
568
原创 D15—C语言内存函数详解
C语言内存操作函数详解:本文介绍了memcpy、memmove、memset和memcmp四个常用内存操作函数。memcpy实现内存复制但不处理重叠,memmove可安全处理重叠内存,memset用于内存初始化设置,memcmp比较内存内容。文章详细说明了各函数原型、功能特点、使用示例及模拟实现方法,并给出使用建议:不重叠用memcpy更快,可能重叠必须用memmove。这些函数在系统编程和底层开发中极为重要,能高效灵活地操作内存数据。
2026-01-24 15:48:17
377
原创 D14—C语言字符与字符串函数深度解析:从使用到内核原理
本文全面介绍了C语言中常用的字符串处理函数,包括字符分类/转换函数(islower、toupper等)、字符串操作函数(strlen、strcpy、strcat、strcmp)及其安全版本(strncpy、strncat、strncmp),以及字符串查找函数strstr和分割函数strtok。文章不仅详细讲解每个函数的基本用法和注意事项,还提供了模拟实现的代码示例。此外,还介绍了错误处理函数strerror的使用方法。最后强调C语言字符串处理的关键在于安全性和效率,提醒开发者注意缓冲区边界和\0结尾等问题。
2026-01-23 20:12:23
871
原创 D13—C语言指针深度解析系列(五):sizeof、strlen与指针运算的深层原理
本文深入探讨了C语言中sizeof与strlen的核心区别,以及数组和指针运算的关键概念。主要内容包括: sizeof(编译时确定)与strlen(运行时确定)的本质差异 数组名的三种特殊行为及其在sizeof中的表现 字符数组初始化方式的微妙区别(有无\0) 二维数组的内存模型与行指针/列指针概念 指针运算的步长规则及经典题目解析 文章通过代码示例和详细分析,揭示了指针与数组在内存访问和运算中的核心机制,帮助读者深入理解C语言底层内存管理原理。
2026-01-21 20:59:25
637
3
原创 D12—C语言指针深度解析系列(四):回调函数、qsort与泛型编程
本文深入探讨了函数指针在回调机制中的高级应用。首先介绍了回调函数的核心概念,通过计算器案例展示了如何利用函数指针消除重复代码。重点分析了C标准库的qsort函数,演示了其对整型数组和结构体的泛型排序实现,并详细讲解了基于void*指针的类型转换机制。最后,通过模拟实现qsort函数,揭示了泛型编程的本质:使用字节级操作实现类型无关的数据处理。文章强调在追求灵活性的同时,需要注意类型安全和代码可读性,建议使用typedef定义回调函数指针并添加充分注释。这些技术为构建可复用、模块化的软件系统提供了重要范式。
2026-01-20 22:48:41
592
1
原创 D11—C语言指针深度解析系列(三):高级指针类型与函数指针
本文深入解析了C语言中的高级指针类型及其应用。主要内容包括:字符指针的特性及字符串常量池机制;数组指针的定义与二维数组处理技巧;函数指针的创建、使用及typedef重命名方法;函数指针数组的构建和转移表实现。重点探讨了这些指针类型在字符串处理、多维数组传参、计算器实现等场景中的实际应用,并提供了典型代码示例。文章最后总结了关键知识点,提出关于函数指针本质、插件系统设计等思考题,为后续学习回调函数和泛型编程奠定基础。
2026-01-19 23:13:56
610
1
原创 D10—C语言指针深度解析系列(二):指针与数组的深度探索
C语言中数组与指针的密切关系解析 摘要:本文深入探讨了C语言中数组与指针的内在联系。数组名本质上是首元素地址,但在sizeof和&操作时例外;指针可以通过加减运算访问数组元素,arr[i]等价于*(arr+i)。数组传参实际传递的是首元素地址,导致函数内无法直接获取数组大小。文章还介绍了二级指针的概念、指针数组的用法,以及用指针数组模拟二维数组的方法。通过冒泡排序实例展示了指针与数组的协同应用,并强调了理解这种关系对掌握C语言的重要性。
2026-01-13 16:42:35
643
原创 D9—C语言指针深度解析系列(一):内存、地址与指针基础
本文系统讲解了C语言指针的核心概念与应用。从内存编址原理出发,详细解析了指针变量的定义、解引用操作和大小特征,阐述了指针类型的意义及其对解引用和运算的影响。重点讨论了const修饰指针的权限控制、指针运算规则,以及野指针的危害与防范措施。通过assert断言和传址调用的实例演示,展示了指针在函数参数传递中的关键作用。最后以自定义字符串函数为例,实践了指针的核心应用。全文贯穿"内存如宿舍"的生动类比,帮助读者理解指针这一C语言核心概念,为后续学习数组与指针的关系奠定基础。
2026-01-10 18:53:37
1018
原创 D8—C语言操作符完全指南:从二进制底层到高级表达式求值
本文系统讲解了C语言操作符体系,重点剖析了二进制位操作。首先介绍了12类核心操作符及其应用场景,包括算术、移位、位运算等。然后深入讲解了计算机二进制表示、进制转换方法和补码机制。详细解析了移位操作符(<<、>>)和位操作符(&、|、^、~)的工作原理,并提供了位运算的实用技巧,如变量交换和统计1的个数。文章还涵盖了表达式求值规则、操作符优先级及结构体访问操作符等内容。通过理解这些底层操作机制,开发者可以编写更高效的代码,建立扎实的编程基础。
2026-01-07 21:40:23
1191
1
原创 D7—函数递归:优雅解决问题的“套娃”艺术
本文系统介绍了C语言中的递归编程技术。首先解释了递归的基本概念,即函数调用自身的特性,并通过简单示例展示其工作原理。重点阐述了递归的两个必要条件:递归结束条件和递归逼近条件。通过阶乘计算和数字打印两个经典案例,详细分析了递归的执行过程和"分治"思想。文章对比了递归与迭代的优缺点,指出递归存在栈溢出风险但代码更简洁,而迭代效率更高但可能更复杂。特别强调了斐波那契数列递归实现的低效性,并给出优化建议如尾递归和记忆化技术。最后提出了递归适用的典型场景(树遍历、分治算法等)和学习建议,强调递归既
2026-01-06 20:31:27
1510
原创 D6—Visual Studio 调试全攻略:让你的代码无处藏“虫”
本文系统介绍了程序调试的基础知识与高级技巧。从"Bug"一词的起源讲起,详细讲解了VS调试环境的使用方法,包括关键快捷键(F9/F5/F10/F11)、监视窗口和内存观察等工具。通过阶乘求和和数组越界两个典型案例,演示了常见错误的调试过程。文章还总结了编程错误分类(编译/链接/运行时错误)及应对策略,并分享了调试思维训练方法(假设验证/二分查找/隔离法)。最后强调调试不仅是修复错误的技术,更是深入理解程序运行机制的思维方式,需要结合耐心观察与系统思考来提升调试能力。
2026-01-05 20:05:43
1016
原创 D5—C语言函数详解:从库函数到自定义函数的完整指南
本文系统介绍了C语言中函数的使用方法,包括库函数和自定义函数。重点讲解了函数定义、参数传递(形参与实参)、return语句、数组参数传递规则等核心概念。同时阐述了嵌套调用、链式访问等高级用法,以及多文件组织中的函数声明与定义。文章还详细解析了static和extern关键字对函数和变量的影响,包括作用域和生命周期的改变。最后总结了函数在C语言模块化编程中的关键作用,强调合理设计函数参数和返回值的重要性,为构建复杂程序提供了基础方法论。
2026-01-04 20:15:47
951
原创 D4—C语言数组深度解析:从内存布局到算法实践
如果说变量是存储数据的单个盒子,那么数组就是一组整齐排列的相同盒子。理解数组,就是理解计算机如何高效组织批量数据的开始。
2026-01-03 14:25:55
1129
原创 D3—掌控程序流程的艺术——分支与循环详解
本文系统介绍了C语言中的分支与循环结构。在分支结构部分,详细讲解了if语句、关系运算符、逻辑运算符、三目运算符和switch语句的使用方法及注意事项。循环结构部分则涵盖while、for、do-while三种循环方式,以及break和continue控制语句的应用场景。文章通过猜数字游戏实例,展示了如何综合运用随机数生成、循环控制和条件判断等知识点。最后强调,掌握这些控制结构是编程思维培养的关键,它们本质上是人类决策与重复思维的代码抽象。建议学习者通过实际项目来巩固这些基础概念,为后续学习数组、函数等更复杂
2026-01-02 17:24:17
1262
原创 D2—C语言数据类型和变量
本文系统介绍了C语言的基础数据类型与操作,主要包括:1. 数据类型分类(字符型、整型、浮点型、布尔型)及其取值范围;2. 变量定义与作用域(全局/局部变量);3. 常用操作符(算术、赋值、单目、强制类型转换)的使用方法;4. 输入输出函数(printf/scanf)的格式化控制技巧;5. 编程实例与常见问题。文章详细讲解了各数据类型的存储特性、操作符的优先级与陷阱、格式化输出的占位符规范等核心知识点,并提供了实际应用示例。掌握这些基础知识是编写高效、安全C程序的前提条件。
2026-01-01 17:48:11
1133
原创 D1—C语言的常见概念
本文系统介绍了C语言的核心概念,从历史背景到实际应用。主要内容包括:C语言与Unix系统的共生关系;编译过程的四个关键步骤;VS2022开发环境的选择建议;main函数的三大铁律;第一个C程序示例及printf解析;32个关键字的分类说明;ASCII编码原理与应用;字符串的\0终止符特性;14种转义字符详解;五种语句类型区分;注释的规范写法;三大程序结构与九种控制语句。文章强调理论与实践结合,推荐初学者通过牛客网和蓝桥云课进行编程练习,帮助建立系统的C语言知识体系。
2025-12-31 23:59:42
1097
原创 利用简单游戏巩固C语言知识之扫雷篇
当我们学习了C语言的数组和函数知识后,就可以写一个扫雷游戏来对这些知识进行一个巩固与拔高,发现自己的问题同时提高我们的编程素质。扫雷游戏主要考验了数组以及函数的知识,其中函数的嵌套调用是关键,需要注意各个参数的使用。在代码编写过程中,我也发现了自己的不足,并有所进步。同时扫雷游戏还可以进一步改进,增加更多功能,有兴趣的同学可以自行探索。
2025-10-12 21:45:04
660
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅