![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java数据结构
文章平均质量分 96
探索Java数据结构之奥秘:从基础到进阶的全方位解析。本专栏将带你深入了解Java中的数组、链表、栈、队列等基本数据结构,以及树、图等高级数据结构。通过实际案例和代码,我们将一起探讨数据结构在解决实际问题中的应用,助你提升编程能力和算法水平。
泛黄的咖啡店
这个作者很懒,什么都没留下…
展开
-
Java数据结构--堆
堆顶元素是二叉树的根节点,即列表首元素。“从顶至底堆化”的操作方向与“从底至顶堆化”相反,我们将根节点的值与其两个子节点的值进行比较,将最大的子节点与根节点交换。如图所示,给定索引 i,其左子节点索引为 2i+1 ,右子节点索引为 2i+2,父节点索引为 (i-1)/2(向下整除)。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须交换的节点时结束。需要指出的是,许多编程语言提供的是「优先队列 priority queue」,这是一种抽象数据结构,定义为具有优先级排序的队列。原创 2024-01-01 16:40:00 · 1498 阅读 · 0 评论 -
Java数据结构--树
当给定一个二叉树的节点时,我们将该节点的左子节点及其以下节点形成的树称为该节点的「左子树 left subtree」,同理可得「右子树 right subtree」。根据层序遍历的特性,我们可以推导出父节点索引与子节点索引之间的“映射公式”:若某节点的索引为 i,则该节点的左子节点索引为 2i+1,右子节点索引为 2i+2。如图所示,如果将“节点 2”视为父节点,则其左子节点和右子节点分别是“节点 4”和“节点 5”,左子树是“节点 4 及其以下节点形成的树”,右子树是“节点 5 及其以下节点形成的树”。原创 2023-12-24 12:27:53 · 1034 阅读 · 1 评论 -
数据结构--哈希表
在哈希表中,输入空间是所有 key ,输出空间是所有桶(数组索引)。「哈希表 hash table」,又称「散列表」,其通过建立键 key 与值 value 之间的映射,实现高效的元素查询。当发生冲突时,平方探测不是简单地跳过一个固定的步数,而是跳过“探测次数的平方”的步数,即1,4,9,…对于上述示例中的哈希函数,当输入的 key 后两位相同时,哈希函数的输出结果也相同。从本质上看,哈希函数的作用是将所有 key 构成的输入空间映射到数组所有索引构成的输出空间,而输入空间往往远大于输出空间。原创 2023-12-10 11:39:02 · 1150 阅读 · 1 评论 -
Java数据结构--栈和队列
如图所示,「双向队列 double-ended queue」提供了更高的灵活性,允许在头部和尾部执行元素的添加或删除操作。然而,数组和链表都可以在任意位置添加和删除元素,因此栈可以视为一种受限制的数组或链表。将把元素添加到栈顶的操作叫作“入栈”,删除栈顶元素的操作叫作“出栈”。如图所示,我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队尾的操作称为“入队”,删除队首元素的操作称为“出队”。我们可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”,规定队尾仅可添加节点,队首仅可删除节点。原创 2023-12-07 16:38:43 · 1133 阅读 · 0 评论 -
Java数据结构--数组和链表
内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间。在链表中插入节点非常容易。如图 ,假设我们想在相邻的两个节点 n0 和 n1 之间插入一个新节点 P ,则只需改变两个节点引用(指针)即可,时间复杂度为 O(1)。在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。遍历链表,查找其中值为 target 的节点,输出该节点在链表中的索引。原创 2023-12-05 22:30:39 · 1011 阅读 · 0 评论