- 博客(229)
- 收藏
- 关注
原创 【数据结构】算法艺术:如何用两个栈(LIFO)优雅地模拟队列(FIFO)?
栈(LIFO)和队列(FIFO)是两种基础但行为相反的数据结构。本文深入探讨了如何利用双栈模型,巧妙地实现了队列的先进先出特性。我们将详细解析输入栈(s1)与输出栈(s2)的职责分离,剖析核心操作中懒惰转移策略的设计哲学。更重要的是,通过严谨的摊还时间复杂度分析,证明双栈队列能在连续操作序列中达到与原生队列相同的O(1)高效性能。文章提供完整的C语言代码实现与工业级注释,带你领略数据结构互模拟的精妙之处。
2026-07-30 20:35:17
208
原创 【数据结构】栈与队列的“跨界”对话:如何用双队列完美模拟栈的LIFO特性?
在数据结构的世界中,栈(LIFO)与队列(FIFO)本是遵循相反原则的两种基础线性结构。本文直面经典算法面试题“用队列实现栈”,深入解析如何通过两个队列的巧妙协作,突破FIFO与LIFO的本质矛盾。我们将从数据结构定义出发,逐步拆解push、pop、top、empty四大操作的实现逻辑,重点揭示O(1)入栈与O(n)出栈的设计权衡,并与单队列方案进行对比分析。无论你是准备技术面试,还是希望深化对数据结构抽象的理解,这篇文章都将为你提供清晰的实现思路与深度的设计思考。
2026-07-13 17:07:54
25
原创 【数据结构】手撕队列(Queue):从FIFO底层原理到高阶应用的全景解析
队列(Queue)作为先进先出的经典数据结构,是操作系统调度、网络缓冲及广度优先搜索(BFS)的基石。文章不仅详细讲解了链表实现队列的内存管理与指针操作技巧,还对比了数组实现的优劣与假溢出问题。此外,更进一步探讨了循环队列、双端队列、阻塞队列等高级变体。
2026-07-13 17:06:44
139
原创 【数据结构】万字深度解析 | 循环队列:为什么数组实现要牺牲一个单元?
循环队列是解决传统数组队列假溢出问题的精妙方案,它通过取模运算实现了存储空间的循环利用。本指南对循环队列进行了深度解析,首先从队列的 FIFO 特性及顺序队列的缺陷入手,引出循环队列的核心设计哲学:牺牲一个存储单元以简洁区分队空和队满状态。文章提供了基于 C 语言的数组实现和循环链表实现的完整代码与详细注释,并系统对比了它们在缓存友好性、空间效率和扩容难度等方面的优劣。
2026-07-13 17:06:10
183
原创 【数据结构】栈(Stack)的约束之美:LIFO哲思、实现剖析与算法应用全景深度解析
在计算机科学的广袤疆域中,栈(Stack)是一种受限的线性表,其魅力在于强制执行后进先出(LIFO)原则,体现着我们解决问题的智慧和效率。这种极简的约束,使其天然契合需要时间逆序处理和嵌套结构配对的经典问题。无论是基于动态数组实现的顺序栈,还是利用链式存储的链栈,以及高效利用空间的共享栈,栈都以其 $O(1)$ 的均摊或稳定时间复杂度,成为函数调用、表达式求值、括号匹配和深度优先搜索等核心算法和系统架构中不可或缺的基石。掌握栈,就是掌握了计算思维的核心脉络之一。
2026-07-13 17:04:36
199
原创 【C语言/数据结构】零基础打造控制台游戏:贪吃蛇实战教程----链表与Win32 API的完美结合!
本文详细介绍了如何使用 C 语言和 Win32 API 在控制台实现经典的贪吃蛇游戏。项目核心在于应用单向链表来模拟蛇的移动和生长,通过头部插入和尾部删除操作实现平移或吃食增长。文章深入讲解了 Win32 API 在控制台设置(如隐藏光标、设置窗口大小、定位光标)中的应用,并利用 setlocale 实现了对宽字符(如 L'□'、L'●'、L'★')的支持。最后,通过 GetAsyncKeyState 实现键盘响应,并设计了碰撞检测和内存释放机制,是巩固 C 语言、链表和系统编程知识的绝佳实战项目。
2026-07-13 17:02:32
167
原创 【数据结构】随机链表复制的终极奥秘——初学者的三步破解法
还在用哈希表O(N)空间解随机链表的复制?这篇文章将带你走进一个O(1)空间复杂度的精妙世界!将完整还原一个算法初学者如何从困惑到顿悟的全过程。文章核心在于嵌入-利用-分离三步法:巧妙地将拷贝节点插在原节点旁,创建天然映射,从而在不使用额外空间的情况下,完美解决 random指针的指向问题。无论是新手还是希望优化空间复杂度的开发者,都能从中获得链表解题思维的巨大提升。
2026-07-13 13:51:38
197
原创 算法深潜:链表中的生死之环(LeetCode 141 & 142 详解)
本文深度剖析链表带环(Cycle)问题的快慢指针解法。不仅涵盖了如何高效判断环的存在,更通过严谨的数学推导和相对速度分析,解释了指针必然相遇的原理,以及如何精准定位环的入口。对于进阶面试中常考的**非标准步长(如快走3步)**情况也进行了详细讨论。掌握本文内容,即可彻底攻克链表环形问题。
2026-07-13 13:46:03
183
原创 【数据结构】从 O(1) 到 O(N):程序员进阶路上必修的算法效率课!
文章旨在以通俗易懂的方式讲解算法中的核心概念——时间复杂度。首先阐明了为什么直接测量程序运行时间是不可靠的,并引入了更科学的时间复杂度来衡量算法效率。重点介绍了大 O 表示法及其简化的推导规则(保留最高阶、忽略系数与低阶项)。通过 O(1)、 O(N)、 O(N^2)、 O(log N) 等常见复杂度的案例分析和代码示例,帮助读者理解不同算法的增长趋势。最后,文章简要提及了空间复杂度的概念,为编程初学者提供了一个清晰、完整的算法效率评估框架。
2026-07-13 13:45:16
387
原创 【数据结构】链表进化论:C语言实现带哨兵位的双向循环链表,解锁O(1)删除的奥秘
如果单链表是自行车,那么双向循环带哨兵位链表就是跑车!本文带你解锁链表的终极形态,实现性能的指数级飞跃!本文将带你实现数据结构的一次史诗级进化!从单链表的局限出发,深入剖析双向循环带哨兵位链表的八大优势,手把手用C语言实现这一“链表究极形态”。文章内含完整可运行代码、性能对比分析和实战应用场景,助你彻底掌握这一高效数据结构!
2026-07-13 13:43:30
361
原创 【数据结构】链表宝典:用11个核心操作吃透单链表的指针艺术
一篇掌握单链表的增删查改精髓。本文基于C语言,详细剖析了单链表(Singly Linked List)的结构、从头插到尾删的11个核心函数实现(含源码、思路和注意事项),并深度解释了操作链表头部时,为何必须使用二级指针 SLNode** pphead,帮你彻底攻克指针难点。
2026-07-13 13:39:38
820
原创 【数据结构】深入浅出:手把手实现动态顺序表,从此不再怕数组扩容!
还在为固定数组的空间浪费而烦恼?还在为数据结构的入门而头疼?本文带你从零开始,深入理解动态顺序表的实现原理。通过详细的代码解析和生动的类比,让你彻底掌握顺序表的扩容机制、插入删除操作,以及各种核心算法的实现细节。无论是初学者还是想要巩固基础的开发者,都能从中获益匪浅。
2026-01-14 21:39:55
764
原创 【C 语言专栏收官】预处理完全攻略:宏、条件编译与代码安全的最后一道防线
C 语言的预处理器是性能优化的利器,也是最容易导致程序崩溃的“陷阱区”。本文为中级 C 开发者提供了一套完整的预处理知识框架。您将深入理解宏的文本替换本质,掌握利用括号防御优先级陷阱和参数副作用的黄金法则。内容涵盖 # 字符串化和 ## 标记连接的高级技巧、#define 与 const/inline 函数的终极抉择,以及利用条件编译实现跨平台、Debug/Release 版本的代码隔离。
2026-01-13 22:12:52
765
原创 【C 语言】硬核避坑动态内存管理:从野指针到柔性数组的“防爆”指南
你是否还在为 C 语言的 野指针 和 内存泄漏 而头疼?程序崩溃、数据混乱、系统资源耗尽——这些都是堆内存管理不当的“致命伤”。本文将基于资深工程师的实战经验,为你从零构建一个可靠的知识框架。我们不仅会通过 深度表格 对比 malloc/calloc 的优劣,用 反面教材 演示 NULL 检查和越界访问的后果,更会揭秘 realloc **异地搬家**的隐形陷阱,并介绍高效的 柔性数组 技巧。掌握“黄金法则”,告别 C 语言的内存噩梦!
2026-01-11 19:39:42
1405
原创 【C 语言】从源码到可执行文件:彻底搞懂编译与链接全过程
很多人写了很久 C,却从未真正了解“代码是怎么被机器听懂的”。每次点击运行,无数看不见的机制正在工作——宏展开、词法分析、语法树构建、代码优化、符号解析、地址重定位……本文将以 array[index] = 4 + 2 * 10 + 3 * (5 + 1); 为例,带你拆解编译器从预处理 → 编译 → 汇编 → 链接 → 执行的完整流程,并用 Token 表、AST 图、高亮语义分析等方式可视化展示 C 程序的内部世界。
2026-01-10 21:40:58
1227
原创 【C语言】自定义类型详解:结构体、联合体、位段与内存对齐实战指南
作为C语言开发者,你是否还在为结构体内存对齐、联合体共享机制和位段跨平台坑而困惑?本文从基础回顾入手,深入剖析匿名结构体、自引用错误、内存对齐规则及嵌套计算,结合代码示例和内存布局图,教你优化空间、提升性能。还包括联合体大小计算、实际应用(如判断大小端)和位段在网络协议中的妙用。无论面试还是项目,这篇指南助你避坑,成为高效C码农!
2026-01-08 21:50:31
1523
原创 【C语言】彻底搞懂计算机底层:补码、大小端、IEEE 754,一文吃透数据在内存中到底怎么存!
这篇文章带你一口气彻底搞懂程序员一生都绕不过的三座大山:整数补码存储、大小端字节序、IEEE 754 浮点数标准。手把手教你两种代码检测当前机器是大端还是小端,配经典陷阱题(strlen 死循环、无符号倒序无限循环、指针越界取值、整型提升坑……)完整推导内存布局,看完这篇硬核长文,你将真正看见“数据在内存中长什么模样”,从此面对底层 bug、面试八股文、奇葩现象再也不懵。
2026-01-07 21:09:56
868
原创 【C 语言】征服文件 I/O:透视数据流、FILE* 核心机制与高效实践全指南
本文深度剖析 C 语言文件操作核心机制,实现数据的持久化存储。首先阐述了文件流 (Stream) 这一数据管道概念,以及FILE* 作为流的控制阀门的结构与职责。全面覆盖所有 I/O 方式:包括字符/行操作(fgetc/fputs)、格式化 I/O(fprintf/fscanf)以及随机读写(fseek/ftell)等实用技术。重点揭示了文件缓冲区提高 I/O 效率的工作原理与管理方法,并以详尽案例纠正了 feof 和 ferror 的常见误用。
2026-01-06 21:32:09
1510
原创 【C语言】指针终极挑战(5):这7道题能全对,指针就算真懂了!
指针是C语言的灵魂,却也是90%程序员的噩梦!本文直捣7道大厂/校招必考指针杀手题:从strlen(arr)与&arr的千年陷阱、数组名退化规则、&arr+1跳整个数组的玄学、sizeof多重身份切换、二维数组指针错位运算,到三级指针cpp[-1][-1]+1的致幻操作,全程手推+自绘内存图+64位真实运行截图。一文吃透数组与指针的所有核心本质,通关后面试再也不怕被指针虐,建议收藏反复刷!
2026-01-05 21:42:48
1161
原创 【C语言】指针的终极奥义(4):手撕 qsort 源码,揭秘 C 语言通用排序的黑魔法!
C 语言的 qsort 函数因其能够排序任何类型的数据而被称为“通用排序利器”。本文将从回调函数的核心概念出发,深度剖析 qsort 如何通过 void* 指针和函数指针实现代码的极致抽象。我们将以冒泡排序为骨架,完整模拟实现一个通用排序函数 bubble_sort_qsort,并详细讲解实现通用性所需的四个关键抽象:通用函数签名、按字节寻址、回调比较与逐字节交换。通过最终的运行结果,我们将证明这种基于回调的通用编程思想的强大与灵活。
2026-01-04 14:19:48
561
原创 【C语言】高级指针(3):彻底掌握指针数组、二维传参核心与函数转移表的构建艺术
本篇博客旨在深入剖析C语言中进阶指针的四大核心概念:首先,详解指针数组的本质和应用,并揭示二维数组传参时必须依赖数组指针来正确实现行间跳转的秘密。随后,深度剖析字符指针指向字符串常量时的内存机制,区分常量与数组的根本差异。最后,引入函数指针的概念,并演示如何利用函数指针数组构建高效的转移表(Jump Table),以取代复杂的条件分支结构,从而全面提升您的C语言编程能力和代码效率。
2026-01-04 14:19:33
1029
原创 【C语言】指针深度剖析(2):从“数组名陷阱”到“二级指针操控”的进阶指南
数组名到底是指针还是整个数组?一维数组传参为何突然‘缩水’?一文带你拆穿 C 语言地址陷阱,从 arr[i] 到 **ppa,三步解锁高效内存操作!
2026-01-04 14:18:32
711
原创 【C语言】“灵魂”指针全攻略(1):从内存原理到野指针规避的七大核心知识点!
感觉指针像天书?每次遇到指针就头疼?别担心!指针是C语言高效灵活的灵魂所在。本篇超详细博客将带您从零开始,通过生动的“宿舍楼”类比,彻底理解内存、地址、指针的底层原理。文章详细解析了核心符号`&`和`*`的用法、指针类型决定“步长”的机制,以及传址调用等高级应用。读完本文,您将掌握:指针类型意义、指针运算、`const`权限限定,以及如何使用`NULL`和`assert`有效规避野指针。让您的C语言功底,真正做到直达底层、安全可靠!
2026-01-04 14:18:10
1035
原创 【C语言】一文吃透进制转换:原理、公式、代码全解析
进制转换是所有编程技能的基石,它揭示了数据在计算机内存中的本质。本文旨在提供一份最详尽的C语言进制转换实战指南。我们将从二进制、八进制、十进制和十六进制的核心概念出发,深入剖析位权展开法和除N取余法的数学原理。最后,提供一套完整的C语言代码实现(包括手动实现和利用strtol等库函数),帮助您不仅知其然,更知其所以然,轻松应对各种转换场景。
2026-01-04 14:17:45
895
原创 【C语言】底层揭秘:函数调用背后的“黑魔法”——超详细图解函数栈帧的创建与销毁
函数调用是C语言中最频繁的操作,但其底层逻辑却隐藏在复杂的汇编指令中。你是否曾困惑于局部变量为何随机、传参为何从右向左、返回值如何瞬间带回?本文将带你深入程序的“幕后”,以 VS2019 编译器环境为实例,结合EBP/RBP、ESP/RSP两大核心寄存器,逐句拆解 main 函数调用 Add 函数时的完整汇编代码。通过清晰的图示和表格,我们将彻底揭开函数栈帧创建、传参、执行、销毁的全过程,让你从小白进阶为真正理解C语言底层机制的高手!
2026-01-04 14:08:45
1541
原创 【PTA】 L1-009 满分踩坑笔记,带负数、爆 long、0 分子、测试点一次讲透!
用一次循环完成有理分数累加,现场通分、约分,全程防溢出、自动处理负号、0 分子、带分数输出。文章给出逐行推导 + 易错数据类型,附可直接 AC 的 C 语言源码,1 ms 通过 PTA 全部测试点。
2026-01-04 14:08:12
910
原创 【C语言】入门必看四大内存函数全解析:memcpy、memmove、memset、memcmp
你是否总是被 C 语言中的内存函数弄混?memcpy 和 memmove 究竟有何不同?memset 是如何高效初始化内存的?memcmp 为什么能比字符串比较更灵活?别担心!这篇文章将从原理、代码实现、常见问题到优化技巧,全面剖析这四个内存函数的使用场景和注意事项。阅读完,你不仅能熟练运用这些函数,还能理解它们在 C 语言中的底层操作。
2026-01-04 14:07:24
1151
原创 【C语言】别再被字符串坑了:strlen/strcpy/strcat/strcmp/strstr/strtok/strerror 深入解析
这篇文章把 C 语言里你最常用、也最容易踩坑的字符/字符串函数一次讲透:ctype.h 的字符分类与大小写转换,string.h 的长度、复制、拼接、比较、查找与分割(strlen/strcpy/strncpy/strcat/strncat/strcmp/strncmp/strstr/strtok),再到错误信息 strerror/perror 的正确姿势。每个函数都给出典型用法、边界条件、UB 警告、线程安全建议,并配套手写模拟实现帮助你吃透原理。
2026-01-01 22:51:09
1362
原创 【C语言】还在玩扫雷?自己写一个!完整源码+详细讲解,让你彻底掌握递归算法与游戏逻辑!
你能想到的扫雷功能,这里都有:随机布雷、递归展开、标记旗子、自动胜负判定、清屏动画……本文手把手带你用 C 语言写出一个“能玩”的控制台扫雷游戏!不仅给出全部源码,还深入讲解背后的算法逻辑与边界处理技巧。学习完这篇,你不止能写扫雷,更能彻底吃透 二维数组、递归调用、函数模块化设计 的精髓。
2025-12-31 16:32:29
1259
原创 【C语言】零基础到精通:C 指针全景指南预览
系统梳理 C 语言指针知识体系:从内存地址、指针变量与类型开始,逐步深入到数组与指针、二维数组传参、函数指针、回调机制及转移表,并亲手模拟实现 qsort,揭示 sizeof 与 strlen 的本质差异。
2025-12-30 21:30:34
700
原创 【C语言】写一个能自定义规则的“N子棋”游戏!——支持任意棋盘、玩家对战、胜利条件自由设置!
还在玩固定的三子棋?来试试自己写个“能变形”的!本文手把手带你用 C 语言实现一个可自由设置棋盘大小与连线数量的 N子棋游戏 —— 不仅能玩“三子棋”,还能玩“五子棋”、十连棋!支持双人实时对战、清屏刷新、智能胜负判定、异常输入保护等功能。
2025-12-29 20:45:35
1203
原创 【C语言】函数递归详解(含汉诺塔动图演示)
递归(Recursion)是程序设计中最具思想性、也最容易被误解的概念之一。本文系统讲解了函数递归的核心原理与实现方法,通过阶乘、逐位打印整数及汉诺塔问题等示例,深入解析递归与迭代的区别,并附有三层与四层汉诺塔递归动图演示,帮助读者直观理解“分解与回归”的全过程。
2025-12-28 21:54:54
1212
原创 【C语言】告别位运算恐惧!C语言操作符详解大全
一张优先级速查表 + 进制/原反补/移位/位运算口诀,带你 5 min 学完 C 语言所有操作符!
2025-12-28 21:54:29
739
原创 【MySQL】 表的约束(下)
当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)自增长字段必须是整数一张表最多只能有一个自增长| 502 |唯一键就可以解决表中有多个字段需要唯一性约束的问题。唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
2025-03-22 15:36:54
1048
原创 Tomcat的升级
拷贝原Tomcat内容到新Tomcat目录下,webapps下源码、conf下配置文件(比如server.xml文件[可以直接覆盖,但是备份一份再覆盖更佳])tar -zcvf oldTomcat.tar.gz 旧版本Tomcat目录。下载地址(官网):https://tomcat.apache.org/进入tomcat下bin目录,启动tomcat。老版本bin目录下,停止Tomcat服务。给新版本Tomcat目录添加执行权限。上传升级包至服务器对应目录。
2025-03-22 02:50:05
958
原创 SpringUtil获取Spring容器对象
*自己公司使用的简单的SpringUtil,可以使用直接从Spring容器中获取对象.比较方便. 主要就是实现ApplicationContextAware ,学过Spring的都知道,Spring提供一些实现Aware对应的类,来获取对应的信息,比如,
2025-03-22 01:14:02
552
原创 Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
这里只做演示和介绍,如果只需要了解在Java中使用可跳过,去看第四部分,但是这些还是很有必要了解一下。Docs。
2025-03-10 23:48:39
1336
原创 Spring Boot(七):Swagger 接口文档
Swagger 是一款 RESTful 风格的接口文档在线自动生成 + 功能测试功能软件。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。目标是使客户端和文件系统作为服务器以同样的速度(同步)更新文件的方法,参数和模型紧密集成到服务器。这个解释简单点来讲就是说,Swagger 是一款可以根据 resutful 风格生成的接口开发文档,API 文档与 API 同步更新,并且支持做测试的一款中间软件。
2025-03-10 17:49:06
1374
原创 Redis有什么作用?面试题答案
Redis能够用于地理位置应用是因为它支持了GeoHash类型,GeoHash是一个允许有一定误差的地理坐标,它的原理就是将地图画成很多个小格子,只记录坐标在哪个小格子里面,每一个小格子对应一个Hash数值,以此快速的进行Geo查询和操作。这里还涉及到了一个原子操作的问题,比如 key 为 a,我们读取 a,在内存+1运算得到 a+1 的结果,之后再去写入到Redis中,这个过程并非原子操作。Redlock算法的主要思想是在多个Redis实例上创建锁,这些实例可以是不同的节点或者不同的Redis集群。
2025-03-10 13:03:00
962
原创 phpStorm环境配置与应用
打开 PhpStorm,选择“File” -> “Settings”(或“Preferences”在macOS上)。选择“Project: YourProjectName” -> “Project Interpreter”。选择“VCS” -> “Enable Version Control Integration”。打开 PhpStorm,选择“Create New Project”。点击齿轮图标,选择“Add” -> “Local”。打开 PhpStorm,选择“Open”。确认设置后,点击“OK”。
2025-03-07 23:13:46
911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅