- 博客(25)
- 收藏
- 关注
原创 数据结构筑基 | 栈与队列:底层实现
本文详细记录了栈和队列两种数据结构的实现过程与设计思考。栈采用动态数组实现,利用数组尾部操作高效的特点;队列选用链表结构,避免数组实现的元素移动问题。文章包含完整的C语言实现代码,重点分析了两种数据结构的时间复杂度,并提出了队列实现的优化方案(增加size变量)。同时总结了开发过程中的调试经验,包括头文件规范、命名规范和内存安全等工程实践要点,最后探讨了循环队列的设计思想。通过手写实现,深入理解了不同数据结构的适用场景和实现细节。
2026-03-03 15:30:00
1170
1
原创 C语言数据结构通关指南:从“物理连续”到“逻辑闭环”的演进之路
本文系统性地介绍了三种线性表数据结构及其实现逻辑。从顺序表的动态扩容机制到单链表的二级指针应用,最终探讨了带头双向循环链表的优越性能。通过Gitee开源项目展示,作者详细分析了各类数据结构的特点:顺序表支持快速随机访问但插入效率低;单链表牺牲空间换取灵活性;带头双向循环链表通过自指和双向指针实现了O(1)复杂度的各类操作。文章特别强调数据结构选择需权衡访问模式、空间利用和代码复杂度,建议算法题侧重单链表,工程开发优先选用双向循环链表。项目地址为https://gitee.com/lu-ma-flies-fa
2026-02-12 20:04:16
659
原创 【数据结构】:如何一眼看穿算法的“快慢”——时间与空间复杂度全解析
本文系统解析了算法复杂度分析的核心概念。首先指出仅用计时器评估算法的局限性,强调需要数学建模。重点讲解时间复杂度的大O表示法推导规则(保留最高阶、去系数、常数变1),通过循环、嵌套循环、二分查找和递归等典型场景进行实例分析。同时介绍空间复杂度的计算方法,包括栈帧消耗。最后以LeetCode旋转数组为例,对比三种解法的时间/空间复杂度(O(N²)、O(N)、O(1)),揭示算法优化的本质:在时间效率(优先O(N)或O(logN))和空间消耗(尽量O(1))间取得平衡。复杂度分析是编写高效算法的基础能力,尤其在
2026-01-28 15:16:03
813
2
原创 【C语言进阶】给数据一个“家”:从零开始掌握文件操作
本文介绍了C语言文件操作的核心知识点。首先区分了文本文件和二进制文件的存储差异,文本文件可读但占用空间较大,二进制文件更节省空间。接着讲解了文件操作的三个步骤:打开(fopen)、读写、关闭(fclose),强调了文件指针FILE*的重要性和路径检查的必要性。文章详细对比了各种读写函数,重点推荐了fprintf/fscanf处理结构体数据,以及sprintf/sscanf进行序列化操作。还介绍了fseek实现文件随机访问,纠正了feof的常见误用,并解释了缓冲区的必要性。最后总结了文件操作的注意事项:根据数
2026-01-27 22:22:54
610
1
原创 【C语言进阶】不再为数组大小发愁:手把手教你玩转“动态内存
本文介绍了C语言动态内存管理的核心概念与技巧。主要内容包括:1)动态内存"三剑客":malloc申请未初始化空间、calloc申请清零空间、realloc调整空间大小;2)内存泄漏防范与free函数使用;3)动态内存常见错误如越界访问、重复释放等;4)柔性数组的高级应用;5)C/C++内存区域划分。文章强调动态内存管理是C语言的重要特性,既能实现灵活数据结构,也容易引发内存问题,需要遵循"谁申请谁释放"原则。通过实例讲解了各种函数的使用方法和注意事项,帮助开发者掌握这
2026-01-27 11:30:57
542
1
原创 【C语言进阶】省流大师 Union 与 代码洁癖 Enum:自定义类型的“双子星”
本文介绍了C语言中联合体(Union)和枚举(Enum)的特性与应用。联合体通过内存共享机制实现高效存储,可用于判断大小端、优化数据结构等场景,但需注意内存对齐规则。枚举则能替代魔法数字,提升代码可读性和可维护性。两者结合使用既能优化内存占用,又能提高代码质量。
2026-01-27 11:18:53
593
1
原创 【C语言进阶】结构体全解:从“内存对齐”到“位段”的底层秘密
本文系统总结了C语言结构体的核心知识点与常见陷阱。首先分析了结构体声明中的两大坑点:匿名结构体的类型不兼容问题和自引用结构体的正确实现方式。然后深入讲解了内存对齐机制,包括其原理、四大对齐规则以及通过成员排序优化内存占用的实战技巧。接着介绍了位段这一高级特性及其使用限制,强调不能对位段成员取地址。最后给出结构体传参的最佳实践,建议优先使用指针传参以避免性能损耗。全文通过具体代码示例,帮助读者掌握结构体的内存布局特性,提升对C语言底层机制的理解。
2026-01-27 10:41:39
656
1
原创 【C语言进阶】内存里的“罗生门”:整数与浮点数的存储之谜
摘要: C语言中,整数和浮点数在内存中的存储方式截然不同。整数采用补码表示,解决了符号位与加减法统一处理的问题。内存存储存在大小端模式,小端模式(如X86架构)将低位字节放在低地址。浮点数遵循IEEE754标准,由符号位(S)、指数位(E)和尾数(M)组成,导致同一二进制数据按不同类型解析时结果差异巨大。例如,int 9按浮点数解析为0,而float 9.0按整数解析会得到1091567616。理解这些底层机制有助于避免数据解析错误和调试困惑。
2026-01-22 12:04:58
561
1
原创 【C语言进阶】不仅是Copy:深入理解 memcpy 与 memmove
本文总结了C语言中四个关键内存操作函数:memcpy用于非重叠内存拷贝,但存在内存重叠缺陷;memmove能处理内存重叠问题,通过分情况选择拷贝方向;memset用于内存初始化,但需注意其按字节操作的特性;memcmp用于比较任意内存块内容。文章通过模拟实现memmove深入剖析其原理,并强调了这些函数使用时需注意的参数单位和内存边界问题,为C语言内存管理提供了实用指导。
2026-01-17 10:06:56
544
1
原创 C语言进阶:手把手吃透字符与字符串函数(含模拟实现)
本文系统梳理了C语言中字符串与字符处理的核心函数,主要涵盖字符分类转换、基础字符串操作、安全字符串函数、字符串查找切割及错误处理五大模块。重点解析了strlen、strcpy等关键函数的底层实现原理,并提供了递归实现strlen等典型示例。文章特别强调了strn系列函数的安全优势,以及strtok等实用工具的使用方法。最后指出理解这些标准库函数对掌握指针和内存管理的重要性,是C语言程序员的必备基本功。
2026-01-16 10:44:11
795
3
原创 C语言指针(五):回调函数与 qsort 的深层关联
本文讲解了C语言中回调函数和qsort的应用。回调函数是通过函数指针调用的函数,能够提高代码复用性,如计算器案例中通过回调统一处理不同运算。qsort是标准库快速排序函数,支持任意数据类型排序:整型数据通过差值比较,结构体可针对成员(如年龄、姓名)定制比较逻辑。文章还演示了用冒泡排序模拟qsort的实现,关键是通过void*指针实现通用性,结合字节操作和回调函数完成数据比较与交换。这些技术能有效提升程序的可维护性和扩展性。
2025-08-15 15:18:11
846
5
原创 C语言指针(四):字符指针、数组指针与函数指针的实战指南
四面八方四通八达四平八稳四书五经四体不勤四脚朝天四面楚歌四分五裂四海为家四海升平四大皆空四亭八当四山五岳四角俱全四荒八极四马攒蹄
2025-08-11 11:34:11
889
3
原创 C 语言扫雷:开局十个雷,剩下全靠猜
在线扫雷游戏:初中上微机课,相必大家都在电脑上玩过扫雷游戏吧有了函数数组的知识,可以实现一个简易版扫雷游戏,在控制台上实现。
2025-07-14 22:59:18
1203
1
原创 函数—c语言:不再是方程式
return_type func_name(形式参数)//函数体return_type是要返回的函数计算结果的类型,若无返回值,给为void;func_name是函数名;{}中为具体函数的实现函数是一个代工厂,将要进行计算的值给他,让他来完成加工,给出产品-结果int Add(int x, int y) //函数定义int main()int a = 0;int b = 0;return 0;int b = 0;//函数调用。
2025-07-13 16:32:22
1157
1
原创 c语言数组从入门到入土
一组数,这组数类型相同数组分为⼀维数组和多维数组,多维数组常⻅的是⼆维数组2.⼀维数组的创建和初始化常量值代表元素的个数,数组名一般起的有意义eg:统计20个人的年龄。
2025-07-12 20:16:00
606
1
原创 什么?!你也刚学编程!
站内的同学们大家好啊!我是一名准大二的学生,经过一年的有关c,cpp语言的学习,我觉得我并不能够编程且有所心得,因此我打算重新开始学习编程的知识,从c开始,并借csdn来记录和巩固自己之所学,同时可以给刚学习编程的同学一点参照,也更希望得到各位大佬们的指正与点拨,我们共勉。希望未来自己能在这方面有所进步,有所收获!计划会包含c,cpp,数据结构,linux等知识,具体会到哪一步,拭目以待呗哈哈哈哈。
2025-07-10 23:31:35
1087
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅