- 博客(29)
- 收藏
- 关注
原创 哈希实现&封装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
1049
原创 红黑树实现—规则&约束的平衡之道
本文系统介绍了红黑树的结构特性与实现方法。红黑树作为平衡二叉搜索树,通过颜色约束规则(根节点为黑、无连续红节点、路径黑节点数相同)实现近似平衡,其查找效率为O(logN)。重点阐述了红黑树的插入操作,详细分析了三种处理情况:单纯变色、单旋+变色和双旋+变色。文章还提供了结点结构定义、查找、结点数统计、高度计算、中序遍历以及平衡性检查等核心功能的实现代码,并通过测试用例验证了实现的正确性。相比AVL树,红黑树以稍宽松的平衡条件换取更少的旋转操作,在实践中应用更为广泛。
2025-12-20 21:49:50
643
原创 AVL树结构实现—高效算法的“平衡大师“
本文系统介绍了AVL树的结构特性与实现原理。AVL树作为平衡二叉搜索树,通过控制左右子树高度差不超过1来保持平衡,其查找、插入时间复杂度均为O(logN)。文章详细解析了AVL树的结点结构、查找、中序遍历等基础操作,重点阐述了插入操作的平衡因子更新规则和四种旋转调整策略(左单旋、右单旋、左右双旋、右左双旋)。通过代码实现和性能测试验证了AVL树的高效性,10万数据插入仅需0.1秒,查找仅79毫秒,树高保持在19层,充分展现了AVL树动态平衡的优势。
2025-12-08 22:09:31
913
原创 关联式容器set、map—底层结构&实战应用
本文介绍了STL中的关联式容器set和map。set是基于红黑树实现的key搜索容器,支持去重和自动排序,常用接口包括insert、erase、find等;map是key-value结构的红黑树实现,支持operator[]访问和修改。文章详细讲解了set/map的定义、常用接口和使用方法,并分析了multiset/multimap的区别。最后通过四个实际应用案例(求数组交集、链表环入口点、随机链表复制和前K高频单词)展示了这些容器的强大功能。
2025-12-04 18:59:28
888
原创 二叉搜索树算法实现—查找&映射的思想艺术
本文详细介绍了二叉搜索树(BST)的结构与实现。二叉搜索树是一种基于二叉树的数据结构,其左子树所有节点值小于根节点,右子树所有节点值大于根节点。文章首先阐述了BST的定义和性质,然后重点讲解了查找、插入、删除等核心操作的实现方法,包括处理删除时的四种不同情况。同时介绍了key-value场景下的BST实现及其应用,如简易字典和统计词频。文章还分析了BST的性能特点,指出其在最坏情况下会退化为链表,时间复杂度为O(N)。最后指出BST是AVL树、红黑树等更高级平衡树结构的基础。
2025-11-29 15:39:07
809
原创 继承&多态—C++面向对象的“瑞士军刀”
本文将围绕继承、多态两大特性展开介绍,继承、多态可认为是在封装的基础上进一步扩展,进一步实现了代码复用。在继承中,子类将继承父类,父类的成员变量和函数在子类中都各有一份,子类在父类的基础上进一步扩展成员和功能,实现了父类的复用,多态与模板类似,都能实现复用,不同在于模板是通过传不同参数类型,在编译时生成对应的函数,是静态的,而多态则是同一个函数通过传不同的对象,在运行时实现相应的功能,是动态的。在面向对象编程中,继承、多态可谓是面向对象的"瑞士军刀",在面向对象编程中有着广泛的应用。
2025-11-25 12:21:47
614
原创 STL设计模式探秘:容器适配器&仿函数
本文探讨了STL中容器适配器与仿函数的实现原理及应用。容器适配器(stack、queue、priority_queue)通过封装现有容器(vector、list、deque)实现特定结构,其中deque因其高效的两端操作成为默认适配容器。仿函数通过重载operator()实现函数式调用,为排序等操作提供灵活性。重点分析了:1) 容器适配器的实现机制,包括stack基于vector、queue基于list的适配方法;2) deque的中控指针数组结构及其迭代器实现;3) priority_queue的堆算法。
2025-11-15 21:41:42
1303
原创 从基本用法到迭代器实现—list重难点突破
本文介绍了C++ STL中list容器的实现原理及核心接口。list基于带头双向循环链表实现,其迭代器通过封装结点指针并重载操作符实现,支持增删改查等操作。重点分析了list的特有接口如sort、merge、splice等,详细讲解了迭代器模板的实现原理,包括operator*和operator->的重载。通过对比vector,指出list插入不会导致迭代器失效但删除会失效的特点。最后展示了如何实现list的核心功能,包括构造、析构、拷贝等,体现了通过模板化设计减少代码重复的思想。
2025-11-11 21:04:07
761
原创 C++ STL::vector底层剖析
本文介绍了C++ STL中的vector容器,重点分析了其常用接口及实现原理。vector基于动态顺序表实现,具有自动内存管理、灵活改变空间大小的特点。文章详细讲解了构造、迭代器、reserve、resize等核心接口的使用方法,并实现了vector的二重嵌套结构(如二维数组和杨辉三角)。在实现层面,通过三个指针成员变量管理存储空间,剖析了push_back、insert、erase等关键操作的底层逻辑,特别强调了insert和erase操作可能导致的迭代器失效问题。最后总结了vector相比其他容器的优势
2025-11-05 21:21:56
674
原创 C++ string相关接口&模拟实现
本文详细介绍了C++中string类的用法及其模拟实现。string作为基础类封装了字符串操作,是学习面向对象编程的重要切入点。文章首先讲解了string的构造、访问、容量管理等基础用法,通过代码示例展示了迭代器、范围for等高级特性。随后重点阐述了string的模拟实现过程,包括构造函数、拷贝控制、运算符重载等核心功能,并提供了完整的测试验证。实现过程中特别强调了深拷贝的重要性,避免浅拷贝导致的内存问题。最后指出string是C++标准库的重要组成部分。
2025-10-27 21:04:42
1065
原创 C++内存管理&模板深度剖析
本文深入探讨了C++的内存管理机制和模板编程两大核心特性。在内存管理方面,文章详细介绍了C++内存区域的划分(栈、堆、静态区等)以及new/delete操作符的使用,特别是对自定义类型的内存管理机制进行了剖析。在模板编程方面,重点阐述了函数模板和类模板的概念、实现原理及使用方法,包括模板的实例化过程(隐式和显式)。文章通过丰富实例展示了模板如何解决代码复用问题,并对比了C++与C在内存管理和代码复用方面的差异与优势。最后强调理解内存管理和模板编程是掌握C++高效开发的关键所在。
2025-10-14 18:39:59
749
原创 再探类&对象——C++入门进阶
本文深入探讨了C++类和对象的进阶内容,主要包括五个核心知识点:初始化列表的使用规则和注意事项;static成员变量的特性及其共享特性;友元函数和友元类如何突破封装限制;内部类的定义及其与外部类的关系;匿名对象的特性和适用场景。文章通过代码示例详细演示了这些特性的实际应用,并强调了面向对象编程的设计思维,指出理解和掌握这些概念对后续学习C++面向对象编程和STL具有重要意义。
2025-10-06 12:54:24
1108
原创 C++类&对象&运算符重载综合应用——日期类项目的实现
本文介绍了一个C++日期类项目的实现过程,该项目综合应用了类、对象和运算符重载三大核心概念。项目通过Date.h、Date.cpp和Test.cpp三个文件实现日期类,包含年月日成员变量和丰富的成员函数,如日期校验、获取月份天数等。重点实现了各种运算符重载,包括算术运算符(+、-、++、--)、关系运算符(>、<、==等)和流运算符(<<、>>),并对每个功能进行了详细测试验证。该项目展示了C++面向对象编程的特性,通过运算符重载使日期操作更加直观。
2025-10-03 11:30:08
1280
原创 类&对象——C++入门基础
本文介绍了C++中类与对象的核心概念。类作为C语言结构体的扩展,通过class关键字定义,支持成员变量和成员函数,并具有public、private、protected三种访问权限。重点讲解了this指针的隐式传递机制、类的内存对齐规则(与C结构体一致但不包含成员函数),以及6个默认成员函数中的构造函数(用于初始化)和析构函数(用于资源清理)。文章还详细说明了运算符重载的实现方式,包括成员函数形式下this指针的隐式传递特性。最后强调类与对象是面向对象编程的基础,为后续学习封装、继承和多态奠定重要基础。
2025-09-26 17:44:56
894
原创 C++相关概念与语法基础——C基础上的改进与优化
本文对比分析了C与C++的语法特性。C语言贴近底层但存在变量/函数命名冲突、多级指针复杂等问题。C++在此基础上引入命名空间、函数重载、引用等机制,解决了命名冲突问题,简化了指针操作。文章详细介绍了C++的域概念、输入输出流、缺省参数、内联函数和类等核心语法,指出C++通过优化C语言不足提高了开发效率。C++语法更复杂但功能更强大,为后续深入学习软件开发奠定了基础。
2025-09-23 19:40:14
1452
原创 数据结构七大排序算法模拟实现&性能分析
本文系统介绍了数据结构中的七大经典排序算法:冒泡排序、选择排序、堆排序、插入排序、希尔排序、快速排序和归并排序。重点分析了各算法的核心思想、实现逻辑及时间复杂度:冒泡和选择排序时间复杂度为O(N²),适合教学;堆排序和快速排序采用分治思想,时间复杂度为O(NlogN);希尔排序作为插入排序的优化版本,时间复杂度为O(N^1.3)。文章通过代码实现展示了各算法的优化策略(如快速排序的三数取中、小区间优化),并比较了它们的稳定性与适用场景。
2025-09-17 19:19:58
808
原创 二叉树遍历方式&树的递归算法剖析
本文系统介绍了二叉树的基本概念、实现方法和遍历算法。主要内容包括:1)二叉树的递归结构特性,重点区分满二叉树和完全二叉树;2)二叉树结构的实现过程;3)前序、中序、后序三种遍历方式的原理和实现;4)基于递归思想的二叉树算法,如求结点数、叶子数、树高等;5)层序遍历实现及应用;6)完全二叉树的判断方法。文章强调递归思想在树结构中的核心作用,通过大量图示和代码示例,详细展示了如何将二叉树问题转化为左右子树的递归问题求解。最后通过一个综合应用案例,说明了如何根据前序字符串构建二叉树并进行中序遍历。
2025-09-11 17:49:00
1032
原创 循环队列&栈实现队列——栈和队列的深度应用
本文探讨了循环队列的设计与用栈实现队列的方法。循环队列通过顺序表实现,需多开辟一个空间防止假溢出,并使用模运算解决head/tail回绕问题。用栈实现队列则采用双栈结构(输入栈和输出栈),通过两者的互补实现队列的先进先出特性。两种方法都体现了数据结构间的相互转换与应用,有助于加深对栈和队列的理解,提升实际应用能力。
2025-09-05 16:21:36
1327
原创 带环链表与随机链表的复制——链表模块的试金石
本文研究了链表中的带环判断和随机链表复制问题。对于带环链表,通过快慢指针法证明:当快指针速度是慢指针2倍时必然相遇,并推导出环入口点的计算方法。对于随机链表复制,提出三步法:1)在原节点后插入拷贝节点;2)处理random指针关系;3)分离新旧链表。该方法将空间复杂度优化为O(1)。文章通过数学推导和图示分析,展示了链表操作的算法思想,包括快慢指针、周期性和转化思维,对提升链表操作能力具有指导意义。
2025-08-31 15:06:41
970
原创 C语言经典实战项目——借助链表结构实现贪吃蛇游戏
本文详细介绍了使用C语言实现贪吃蛇游戏的全过程。项目采用模块化设计,分为头文件、功能实现和测试三个部分,涉及结构体、枚举、链表、动态内存管理等核心概念。系统实现了贪吃蛇的基本功能:键盘控制移动、随机食物生成、碰撞检测、分数计算等,并支持游戏加速/减速功能。通过500多行代码,完整呈现了游戏初始化、运行和结束的整个生命周期。该项目不仅巩固了C语言基础知识,还实践了数据结构中链表的应用,为后续开发更复杂项目奠定了基础。文章最后展示了成功的测试结果,并鼓励读者继续探索编程世界的无限可能。
2025-08-24 16:30:11
1074
原创 编译、链接的具体过程——C程序底层运行机制的研究
本文系统介绍了C程序从源代码到可执行文件的完整构建过程,重点解析了编译与链接两个核心阶段。编译过程包括词法分析、语法分析、语义分析、中间代码生成与优化等步骤,将预处理后的代码转换为汇编语言;链接过程则通过符号解析、重定位等操作,将多个目标文件与库文件合并生成最终可执行文件。文章通过具体示例详细说明了每个阶段的处理逻辑,揭示了程序底层运行的机制原理,帮助读者深入理解计算机系统如何将人类可读的代码转化为机器可执行的二进制指令。
2025-08-11 15:00:29
1044
原创 C语言的文件创建与文件操作相关的函数
本文介绍了C语言中文件操作的基本方法,包括文件创建、读写操作及相关函数的使用。重点讲解了fopen、fgetc、fputc、fgets、fputs等基础文件I/O函数,以及格式化读写函数fprintf/fscanf和二进制读写函数fwrite/fread。文章还涉及文件指针操作函数(fseek/ftell/rewind)和文件状态判断函数(feof)。最后通过文件拷贝实例演示了这些函数的综合应用。掌握这些文件操作技术可以突破内存限制,实现数据持久化存储,是C语言编程中管理数据的重要技能。
2025-08-10 23:03:15
1479
原创 深度剖析结构体的基本结构与结构体在内存中的对齐方式
本文深入探讨了结构体这一重要的自定义数据类型。首先介绍了结构体的基本定义和赋值方法,包括直接赋值和点操作符赋值,以及结构体嵌套和自引用的实现方式。重点分析了结构体在内存中的存储方式,详细解释了内存对齐规则和位段的概念,并通过具体示例说明如何计算结构体大小。文章还对比了结构体传参和指针传参的内存效率差异,最后总结了结构体在数据聚合和数据结构实现中的重要作用,为读者理解和使用结构体提供了全面的指导。
2025-08-05 23:41:46
1211
原创 不同数据类型在内存中的存储——深入理解内存数据结构
摘要:本文分析了整数和浮点数在内存中的存储方式。整数采用二进制补码形式,char类型占1字节(-128~127),int类型占4字节,存在大小端存储差异;浮点数采用IEEE 754标准,通过符号位S、阶码E和尾数M三部分存储。特别说明了类型强制转换时的数值异常现象(如int转float得0),揭示了不同数据类型存储机制的差异对程序结果的影响。理解这些存储原理有助于调试数值异常问题,优化程序性能。
2025-08-04 18:16:44
1302
原创 str、mem类库函数——相关用法与模拟实现
本文介绍了str和mem类库函数的使用及模拟实现。str类函数包括strlen、strcpy/strncpy、strcat/strncat、strcmp/strncmp、strstr等字符串操作函数,详细说明了各函数的用途、调用格式及编程模拟实现方法。mem类函数重点介绍了memcpy和memmove两个内存操作函数,特别说明memmove能处理内存重叠情况。通过学习和模拟实现这些常用库函数,可以提升编程效率和思维能力,加深对底层操作的理解。文章提供了各函数的实现思路和代码示例,适合C语言开发人员学习和参考
2025-08-03 01:17:28
1074
原创 从入门到精通——关于指针的那些事
本文系统介绍了C语言中指针的概念与应用。从指针的基本定义(内存地址)和指针变量(4/8字节)入手,讲解了指针访问变量、遍历数组/字符串等基础用法。重点阐述了指针与函数、数组的高级应用,包括传址调用swap函数、冒泡排序、二级指针、指针数组等核心内容。此外还涉及二维数组指针、函数指针及其数组等进阶用法,展示了指针作为C语言最灵活特性的强大功能。文章由浅入深地解构了指针这一重要概念,帮助读者全面掌握指针的运用技巧。
2025-07-30 21:25:03
554
原创 扫雷游戏的实现——代码也有趣味的一面
这个扫雷游戏的规则是:游戏里面的数字表示以数字为中心的九宫格周围八个格子里有几个雷,根据不同格子里的数字所代表的区域形成交集,互相佐证,按照这个方法找出所有的地雷,就算挑战成功。哈哈,作者还是一如既往地菜,不过可以看出这个扫雷游戏的代码运行是成功的,大家可以按我这个代码的思路去尝试设计出这个扫雷游戏,或者设计出自己想玩的游戏,利用代码设计出游戏,也算代码别具趣味的一面吧,作者觉得挺有意思的,分享给大家,如果这篇文章有帮助到你,作者不胜荣幸,若文章存在不足之处,欢迎各位指正!下面给就给大家一 一介绍下。
2025-07-15 22:33:09
318
原创 分支与循环结构语句介绍———结构化的C语言
前言:本文主要介绍C语言的分支与循环语句,C语言作为一种基础且运用广泛的结构化语言,主要可将其分为三大结构:顺序、分支、循环结构,本文主要围绕C语言的分支与循环结构展开进行介绍,主要介绍分支语句中的if,switch语句,循环语句中的for,while,do-while语句,以及分支与循环两种语句相互嵌套的情况。至此,C语言循环结构中的for,while,do-while三种语句也介绍完毕,下面举一个例子来介绍C语言中分支与循环两种结构相互嵌套的情况。满足该条件执行的语句;满足该条件执行的语句;
2025-07-13 13:23:46
923
原创 启程 - 我的编程学习之旅
目前还没有特别想进某一家IT公司的打算,但未来选公司的方向肯定是朝着优秀的公司为基准点,当然,这只是现阶段的憧憬。我是杨章凯, 一名对编程世界充满好奇与热情的大学生,我来自福建农林大学的电子信息工程专业,虽然目前我还是编程领域的初学者,但我对如何用代码解决问题充满向往,渴望通过系统学习打开这扇神奇的大门。(4).刻意练习与复习:定期回顾所学知识,通过刷题平台进行算法和数据结构的练习,提升解决问题的能力。周末:每天4小时,主要用于做项目,系统复习,解决疑难问题·,写博客总结。培养良好的代码习惯和调试能力。
2025-07-05 21:11:14
397
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅