当前位置: 首页 > news >正文

《征服数据结构》块状链表

摘要:

1,块状链表的介绍

2,块状链表的代码实现(Java和C++)

1,块状链表的介绍

前面我们讲过数组和链表,数组具有 O(1)的查询时间,O(N)的删除,O(N)的插入,而链表具有 O(N)的查询时间,O(1)的删除,O(1)的插入。应该说这两种数据结构都有优缺点,那么这两种数据结构能不能结合起来使用呢?当然是可以的,结合起来就是我们今天要讲的块状数组。

前面讲到链表时候,我们知道链表的每个节点只存储一个数据,如果数据量比较多的话查找起来比较麻烦,比如我们要查找第10000个节点,需要从头开始遍历链表。

如果我们使用块状链表,链表的每个节点相当于一个块,假如每个块存放1000个数据,我们只需要查找10次就可以定位到所在的块,然后在块中可以直接获取元素的值。

364539d04cb16cfdd051f577151ebd19.png

如果要插入元素,找到对应的块即可插入,插入的时候只需要移动待插入块中后面的元素,其他所有块中的元素不需要移动,虽然插入元素的效率比链表低,但比起数组还是有很大的提升。

b8ed88fccce9adec534a79d1ff157d26.png

对于块状链表有两点要注意,一个是插入的时候如果当前块已经满了,没法在插入了,可以把该块分裂成两个,每个存储原块一半的元素,然后在执行插入。

8ebf0e5e35163163dfa17628768734e4.png

还有就是删除的时候如果删除之后,该块的元素个数已经很少了,并且他的前一个块或者后一个块中元素个数也非常少,这个时候可以考虑两个块进行合并。如果不合并,就会退化成链表,查找效率大大降低。

01af48a381c9bcd5920e627641e40165.png

http://www.lryc.cn/news/356853.html

相关文章:

  • leetCode.86. 分隔链表
  • Java进阶学习笔记5——Static应用知识:单例设计模式
  • Vue 前端加框 给div加红色框框 js实现
  • Percona Toolkit 神器全攻略(实用类)
  • ARM GIC 和NVIC的区别
  • CSS文本粒子动画特效之爱心粒子文字特效-Canvas
  • 小熊家务帮day5 客户管理模块1 (小程序认证,手机验证码认证等)
  • Blender 学习笔记(一)快捷键记录
  • ubuntu linux (20.04) 源码编译cryptopp库 - apt版本过旧
  • 机器学习-3-特征工程的重要性及常用特征选择方法
  • QGis3.34.5工具软件保存样式,软件无反应问题
  • JavaScript(ES6)入门
  • 深入分析 Android Activity (十)
  • 考试“挂了“用日语怎么说,柯桥商务日语培训
  • 【机器学习300问】103、简单的经典卷积神经网络结构设计成什么样?以LeNet-5为例说明。
  • 【代码随想录算法训练营第37期 第二十一天 | LeetCode530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先】
  • 2023 年网络等级保护考试题库及答案
  • springboot集成nacos
  • NoSQL数据库技术与应用 教学设计
  • 比较(一)利用python绘制条形图
  • 【面试】Oracle JDK和Open JDK什么关系?
  • 科学技术创新杂志科学技术创新杂志社科学技术创新编辑部2024年第10期目录
  • ES数据导出成csv文件
  • 结构型设计模式之装饰模式
  • Java - 当年很流行,现在已经淘汰的 Java 技术,请不要在继续学了!!!
  • 驻波比VSWR
  • 多线程-线程池
  • 护网期间遇到的几个上传bypass waf、edr
  • 简述MVC模式
  • C#--Mapster(高性能映射)用法