![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 51
chenkangck50
这个作者很懒,什么都没留下…
展开
-
如何理解和实现二分查找:一篇完整的解析
如果使用 left < right,当 left 和 right 同时指向最后一个元素(也就是目标值)时,循环会结束,因为条件 left < right 不成立,从而导致无法检查最后一个元素。使用 left原创 2024-04-30 18:46:55 · 133 阅读 · 1 评论 -
有向图的邻接表和邻接矩阵
具体来说,有向图的邻接表由一个由节点和它们的邻居节点列表组成的集合构成。这种表示方法可以用一个哈希表或数组来实现,其中哈希表或数组的键或索引表示节点,对应的值是一个列表,存储了该节点的所有邻居节点。具体来说,可以使用 Map,其中键是节点的名称(如字符串表示),值是一个列表,存储了该节点指向的所有邻居节点的名称。有向图的邻接表是一种常用的表示方法,用于表示图中各个节点之间的关系。在有向图中,每条边都有一个方向,因此邻接表中的每个节点记录了该节点指向的其他节点。原创 2024-02-21 13:45:48 · 879 阅读 · 0 评论 -
Java中的序列化方法探索
这些方法允许您将对象的状态转换成一种可以存储或传输的格式,而不依赖于 Java 内置的序列化机制。但是,当基本数据类型被用作类的字段时,在该类实现了 Serializable 接口的情况下,这些基本数据类型的字段会自动包含在序列化过程中。在 Java 中,序列化是将对象的状态信息转换为可以存储或传输的形式(例如,转换为字节流)的过程。这意味着,如果您创建了一个实现了 Serializable 接口的类,并且这个类包含基本数据类型的字段,那么当您序列化这个类的对象时,这些基本数据类型的字段也会被序列。原创 2024-01-03 11:31:38 · 1104 阅读 · 0 评论 -
浅谈java中的集合框架
Java 集合框架的核心接口是 java.util.Collection 和 java.util.Map,每种集合框架又是基于底层数据结构的不同,赋予不同的特性,所以只要弄懂了底层数据结构的特性,就能很好的掌握改集合的特性和运用。原创 2023-05-30 15:45:34 · 893 阅读 · 0 评论 -
堆-优先队列priorityqueue原理和应用
堆,优先队列原创 2023-02-23 13:37:16 · 644 阅读 · 0 评论 -
二叉树基本操作-最大深度或者高度
二叉树的深度原创 2023-02-23 11:52:40 · 68 阅读 · 0 评论 -
二叉树的基本操作-层序遍历
二叉树层序遍历原创 2023-02-23 11:50:15 · 55 阅读 · 0 评论 -
二叉树的基本操作-前序遍历,中序遍历和后序遍历
二叉树遍历原创 2023-02-23 11:46:29 · 115 阅读 · 0 评论 -
数据结构堆和jvm 内存结构堆有什么关系
堆原创 2023-02-22 14:58:03 · 79 阅读 · 0 评论 -
数据结构-红黑树(Red-black Tree)
1.为什么需要红黑树虽然二叉查找树查询效率为log n,但是在频繁更新,极端情况下,二叉查找树会退化成链表,时间复杂度会变成O(n),红黑树的出现就是为了防止这种情况的产生,所有红黑树是一个特殊的二叉查找树-平衡二叉查找树2红黑树的定义1.根节点是黑色的;2每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;3任何相邻的节点都不能同时为红色,也就是说,2个红色节点不能连载一起4每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点;3.红黑树的插入和删除都可原创 2021-02-28 15:39:08 · 165 阅读 · 0 评论 -
数据结构-二叉树
根节点:没有父节点的节点叶节点:没有子节点的节点 如G,H,I,J,K,L兄弟节点:父节点相同的节点 如B,C ,D父节点: A 节点就是 B 节点的父节点子节点:B 节点是 A 节点的子节点度:一个节点拥有的子树数称为节点的度(degree)高度(Height)深度(Depth)层(Level)满二叉树:编号 2 的二叉树中,叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个子节点,这种二叉树就叫做满二叉树完全二叉树:编号 3 的二叉树中,叶子节点都在最底下***两原创 2021-02-23 11:34:42 · 82 阅读 · 0 评论 -
数据结构-哈希表(又称散列表)
哈希表:用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。数组的下标是整数,但是通常生存中存储的key都不规则,所以通过散列函数将键值key转成数组下标,存入数组散列函数:就是把键值key 转化为数组下标的函数,例如(关键字)%(数组大小),就是数组下标数组大小一般为质数,因为需要均匀的放在hash表中,质数只能被自生和自生倍数整除散列冲突:模运算后取模值相同,2个不同的key通过散列函数计算出的数组下标一致,就成了散列冲突解决散列冲突,哈希冲突1.原创 2021-02-19 17:33:26 · 184 阅读 · 0 评论 -
数据结构-跳表
跳表(Skip list): 其实就是在链表上建立索引,类型于2分法,是的查询速度更快。如下图就是建立2层索引的跳表时间复杂度: 每两个结点会抽出一个结点作为上一级索引的结点,那第一级索引的结点个数大约就是 n/2,第二级索引的结点个数大约就是 n/4,第三级索引的结点个数大约就是 n/8,依次类推,也就是说,第 k 级索引的结点个数是第 k-1 级索引的结点个数的 1/2,那第 k级索引结点的个数就是 n/(2k)。假设索引有 h 级,最高级的索引有 2 个结点。通过上面的公式,我们可以得到 n/(原创 2021-02-19 16:39:35 · 100 阅读 · 0 评论 -
数组结构-链表
链表(Linked list):链表是一种非连续、非顺序的存储结构。链表本身没有大小的限制,天然地支持动态扩容它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用基础的链表有:单链表:每个节点除了存储数据还有指向像一个节点的后继指针头节点:指向基地址尾节点:后继指针指向null效率:插入/移除时间复杂度为O(n)由于链表不需要连续的空间,所以可以随机插入,不需要搬移数据查询:因为空间不连续,无法通过寻址公式计算下标访问,只能从头节点循环访问,时间复杂度为O(1)循原创 2021-01-21 17:19:14 · 170 阅读 · 0 评论 -
数据结构-数组
定义:Array (数组):一种线性表的数据结构。用一组连续的内存空间,存储相同的类型数据。特点:空间连续 存储类型相同如下图int类型数组,计算机分配一段连续的空间,内存块的首地址为 base_address = 1000。计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算机需要随机访问数组中的某个元素时,它会首先通过下面的寻址公式,计算出该元素存储的内存地址,就可以通过下边轻松找到该数 data_type_size 是每个内存单元的大小a[i]_addr原创 2021-01-20 16:44:51 · 1523 阅读 · 0 评论