- 博客(12)
- 收藏
- 关注
原创 深度/广度 遍历二叉树的实现
本文围绕二叉树遍历展开,介绍了前序、中序、后序(深度遍历)和层序(广度遍历)四种方式,核心差异在于访问根节点的时机。递归实现简洁,依托系统栈完成 “递” 与 “归”;非递归需显式用栈(深度)或队列(层序)模拟,是理解递归本质的关键。理解的核心在于动态模拟:清晰构建遍历过程,明确访问时机、路径及回溯逻辑。通过刻意模拟、反复推演,可将遍历步骤内化为思维程序。这四种遍历是学习复杂二叉树(如平衡树、红黑树)的基础,掌握非递归实现能彻底突破递归理解障碍。
2025-07-17 23:22:05
839
原创 树、二叉树存储、遍历的概念
本文将二叉树比作 “程序员的族谱管理术”,介绍其作为高效数据结构在快速查找等场景中的重要性。内容涵盖树的定义、节点分类及关系,三种存储结构(双亲、孩子、孩子兄弟表示法),二叉树的类型(满二叉树、完全二叉树)与性质,存储方式(顺序、链式),以及前中后序遍历逻辑。通过两道遍历反推树结构的例题,展现二叉树在算法中的应用,是理解数据结构与应对面试的核心内容。
2025-07-06 15:57:41
1662
原创 队列——顺序队列和链式队列
队列是一种遵循先进先出(FIFO)原则的线性表,仅允许在队尾插入、队头删除。其核心体现在缓冲协调(平衡速度差异)、延时任务管理(如订单超时处理)、多线程协作(阻塞队列)及LRU缓存淘汰等场景。顺序队列用数组实现,存在“假溢出”问题,通过循环队列解决,牺牲一个存储单元以(rear+1)%MAX_SIZE==front判断队满,front==rear判队空。链式队列基于链表,动态分配内存,无溢出风险,入队时尾插新节点,出队删除队头节点并释放内存,通过front和rear指针维护队列状态,适用于长度不确定的场景。
2025-06-30 21:43:19
1792
原创 栈、顺序栈与链式栈
栈是遵循后进先出(LIFO)原则的特殊线性表,仅允许在栈顶进行插入(压栈)和删除(出栈)操作,核心用于临时存储与回溯。其应用广泛,如浏览器后退、函数调用栈、括号匹配等。顺序栈用数组实现,有固定大小,可能溢出或浪费空间;链式栈基于链表,可动态扩容,通过头插法实现压栈,删除栈顶节点实现出栈。两者本质区别在于存储结构,顺序栈简单高效但大小受限,链式栈灵活但开销略大。
2025-06-27 00:25:14
988
原创 双向循环链表
摘要:本文介绍了双向循环链表的原理与实现。相较于单向链表,双向循环链表通过前驱和后继指针实现高效增删操作,无需辅助节点。文章详细解析了链表结构、节点定义(含表头),并以图文结合的方式演示了插入和删除的核心操作流程(四步插入法、三步删除法)。代码实现包含初始化、头插/尾插、删除、遍历及释放等完整接口,提供可运行示例验证功能。该结构适用于需要双向遍历的场景,操作效率显著提升。
2025-06-21 00:31:51
1068
原创 单向链表的基本操作及实现(.c)
本文围绕单向链表的基本操作与实现展开,系统讲解链表核心原理与代码实现。首先剖析指针与结构体在链表中的协作机制,强调理解指针本质的三个关键点:指针存储地址、解引用访问内存、明确结果类型。通过对比顺序表,突出链表动态伸缩与插入删除的效率优势。详细阐述带头节点的单向链表结构设计,深入解析插入、删除操作的核心逻辑。完整代码示例覆盖链表的创建、头插、定位插入、按值删除、显示及释放功能,并给出测试流程。读者可通过本文掌握链表操作精髓,理解指针在复杂数据结构中的应用方式,为后续学习高级数据结构筑牢基础。
2025-06-08 14:38:04
1143
原创 数据结构——顺序表的实现(.C)
顺序表是线性表的一种,它采用连续的存储单元依次存储线性表的数据元素。在本项目中,顺序表通过动态数组实现,其数据存储在堆内存中,表头结构体记录了数据空间的首地址、当前数据个数以及最大存储容量。
2025-06-03 18:18:15
2040
原创 数据结构概述、顺序存储表
元素和元素的逻辑关系1.线性逻辑元素与元素之间存在1 : 1的关系;2.非线性结构层级关系(树状关系)元素与元素之间存在1 : n的关系;图集关系假设运动会田径比赛项目有:A(跳高)、B(跳远)、C(标枪)、D(铅球)、E(100m跑)、F(200m跑)。参赛选手的项目表,如下表所列:问如何安排比赛时间,才能使得:(1)每个比赛项目都能顺利进行(无冲突);(2)尽可能缩短比赛时间。元素与元素之间存在m : n的关系;
2025-05-28 21:29:07
769
原创 学数据结构你必须知道有关计组的基础知识(一)
数据类型本质是内存规划方案,通过字节数(sizeof)、存储格式(补码/IEEE 754)及解释规则实现高效存储。整型以补码存储,类型转换时大→小截断低位(如int→char保留低8位)、小→大符号扩展(负数高位补1)。十进制小数转二进制常无限循环(如0.1)导致精度丢失,需误差容限比较。赋值是二进制位拷贝(unsigned→char可能负值),位移分逻辑右移(无符号补0)与算术右移(有符号补符),位运算直接操作二进制(~0全1)。内存二进制视角是数据结构与算法协同优化的核心基础。
2025-05-20 22:16:19
501
原创 数据在内存中的储存方式
计算机中的数以二进制形式表示,称为机器数。机器数的最高位用于表示符号(0为正,1为负),其余位表示数值。为了简化运算,计算机采用原码、反码和补码三种编码方式。原码直观但存在“+0”和“-0”问题;反码解决了“-0”问题,但仍未完全解决运算效率问题;补码通过将减法转化为加法,简化了硬件设计,并消除了零的歧义,扩展了数值表示范围。补码的核心作用在于统一加减法运算,使计算机只需加法器即可完成所有算术运算,同时保持数值的连续性,便于处理边界值。
2025-05-18 16:35:00
850
原创 数据进制的表示及转换
本文介绍了常见的几种进制及其转换方法。计算机内部使用二进制,因其易于物理实现、运算简单、可靠性高且通用性强。二进制、八进制和十六进制之间存在内在联系,每位八进制数相当于3位二进制数,每位十六进制数相当于4位二进制数。文章详细说明了十进制转二、八、十六进制的方法,即“除基取余倒着读”,以及二、八、十六进制转十进制的方法,即“按权展开求和”。此外,还介绍了小数进制的转换方法,包括十进制转其他进制和其他进制转十进制的具体步骤。通过这些方法,可以实现不同进制之间的相互转换。
2025-05-18 11:23:27
353
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人