数据结构与算法
文章平均质量分 67
Join2049
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
图结构通用代码实现
摘要 本文介绍了图结构的代码实现与基本概念。图由顶点(Vertex)和边(Edge)组成,逻辑上与多叉树类似,但节点间可任意连接。图的存储主要有两种方式:邻接表(空间复杂度O(V+E))适合稀疏图,邻接矩阵(空间复杂度O(V²))适合稠密图。文章详细讲解了有向加权图和无向图的实现方法,并提供了一个通用图接口(Graph)的Java实现示例,包括添加/删除边、查询邻接关系等基本操作。最后展示了如何使用邻接表实现加权有向图,包含边的权重处理和常用图操作方法。原创 2025-10-04 09:37:05 · 722 阅读 · 0 评论 -
环形数组技巧及实现
摘要: 环形数组通过求模运算实现逻辑上的环形结构,支持O(1)时间复杂度的头部增删操作。关键点在于利用(start±1 + size) % size实现指针循环移动,其中左移需额外加size避免负数。代码示例包含自动扩缩容、头尾ony增删等核心功能,并解释了为何左移需要加size而右浪不需要。该实现通过维护start、end指针和count计数,高效管理环形数组的边界条件。原创 2025-10-03 08:43:13 · 431 阅读 · 0 评论 -
多叉树的递归层序遍历
本文介绍了多叉树的遍历方法,包括递归遍历(DFS)和层序遍历(BFS)。多叉树是二叉树的延伸,其节点可包含多个子节点。递归遍历框架与二叉树类似,但没有中序遍历概念。层序遍历借助队列实现,提供了三种实现方式:基础版、记录深度版和带权重的状态记录版。文章最后推荐了相关力扣题目供练习。原创 2025-10-02 10:12:14 · 267 阅读 · 0 评论 -
二叉树的递归层序遍历
本文介绍了二叉树的两种遍历方式:递归遍历(DFS)和层序遍历(BFS)。递归遍历分为前序、中序、后序遍历,区别在于操作节点的时机不同。层序遍历使用队列实现,给出了三种写法:基础版、带层数记录版和灵活自定义状态版。其中带层数记录的写法最常用,能解决二叉树最小深度等问题;自定义状态版最灵活,适合处理节点路径权重不同的场景。最后推荐了几道相关的LeetCode练习题。原创 2025-10-01 12:06:57 · 886 阅读 · 0 评论 -
哈希表的核心原理
哈希表是基于数组实现的快速查找数据结构,通过哈希函数将键(key)转换为数组索引实现O(1)时间复杂度的增删改查操作。其核心要素包括:哈希函数设计(通常先获取key的hashCode再取模)、解决哈希碰撞、合理控制负载因子(size/table.length)。特别注意,作为哈希表key的对象必须是不可变类型(如String、Integer),因为可变对象(如ArrayList)修改后会导致哈希值变化,造成数据丢失和内存泄漏问题。哈希表的设计要点在于确保哈希函数高效且稳定,同时避免使用可变对象作为key。原创 2025-09-30 10:17:38 · 358 阅读 · 0 评论 -
几种常见的二叉树
本文介绍了五种常见的二叉树类型及其特性:1)满二叉树,每层节点都满,节点数公式为2^h-1;2)完全二叉树,节点紧凑排列,父子节点索引存在规律;3)二叉搜索树(BST),遵循"左小右大"原则,适合快速查找;4)高度平衡二叉树,每个节点左右子树高度差≤1,高度为O(logN);5)二叉树的实现方式,包括TreeNode类和哈希表模拟。文章通过图示和代码示例直观展示了各类二叉树的特点和构建方法。原创 2025-09-29 09:16:08 · 924 阅读 · 0 评论 -
用链表加强哈希表(LinkedHashMap)
本文介绍了如何通过双向链表增强哈希表功能,实现LinkedHashMap数据结构。核心思路是在标准哈希表基础上,为每个键值对添加双向链表节点,既保持O(1)时间复杂度的增删改查,又能维护插入顺序。文章详细展示了Java实现方案:使用HashMap存储键和链表节点的映射,通过头尾哨兵节点维护双向链表结构。重点说明了put操作需要新建节点并同时更新链表和哈希表,而remove操作需同步删除两者。最后通过示例验证了该实现能正确维护键的插入顺序。这种设计在保持哈希表高效性的同时,增加了顺序访问的能力。原创 2025-09-28 08:27:03 · 235 阅读 · 0 评论 -
用数组加强哈希表(ArrayHashMap)
本文介绍了一种结合哈希表和数组的数据结构ArrayHashMap。该结构通过哈希表存储键到数组索引的映射,数组则存储实际键值对节点。这种设计使得查找、插入、删除操作的时间复杂度均为O(1),并支持随机键访问。删除操作时,采用交换数组末尾元素的方法保持连续性。代码示例展示了get、put、remove和randomKey等核心方法的实现,包括维护两个数据结构间索引一致性的关键步骤。这种结构在需要快速随机访问的场景中特别有用。原创 2025-09-28 08:22:34 · 238 阅读 · 0 评论 -
链表的核心思想
本文介绍了链表(单链表和双链表)的基本操作实现: 单链表操作:包括数组转链表、头插法、尾插法、中间插入、头尾删除及中间删除等核心操作,详细说明了指针移动和节点连接的关键步骤。 双链表操作:展示了双链表的创建方法,以及双链表特有的双向遍历特性。重点演示了双链表的头部插入、尾部插入和中间插入操作,强调需要同时维护prev和next两个指针。 实现要点:所有操作都遵循"先连接后移动"的原则,特别注意指针操作顺序对结果的影响,如插入时需要先处理新节点指针再调整原链表指针。 内存管理:解释了链表操原创 2025-09-27 08:22:25 · 492 阅读 · 0 评论
分享