块状链表与块状树初步

1.块状链表的基本思想
常见的线性表结构修改操作有:再某一位置后插入一段数,从某一位置开始删除连续若干个数,我们不妨先来看看数组和链表这两种常用线性结构的实现效果。
可见,它们各有各的优势和缺点,且恰巧是优势互补。我们不禁想,如果把两者结合起来,是不是会有更优异的表现?块状链表正好是基于这个思想,将数组和链表结合了起来。块状链表整体上看其结构是一个链表,链表上每个节点存放着一段数组,链表上每个节点的数据拼接起来就是原先的整个线性表的内容,“块状”一词由此而来。
块状链表的基本组织形式,假设链表中每个节点所维护的数组的大小为S,那么,一共需要维护C快,满足SC=n(为了计算方便,如果n不是S的倍数,不妨在最后补齐相应数量的空位),n为要维护的元素总个数。按照这种方式分块,我们来看一下块状链表在上述三种操作中的表现。
(1)定位:定位时需要沿着链表的指针依次查找。假设查询数组中第P个数,那么需要找到块Bt,使得t
S<P并且(t+1)S>=P。所以,查询的时间复杂度与块数同阶,为O(C)。当然,你也许会像维护一个反向的索引,即在外部用数组维护链表节点的顺序,这样就可以二分查找了。不过由于块状链表是动态的,每次修改后这个数组又需重新维护,维护这个数组的时间复杂度仍然是O(C)。
(2)插入:插入时间显然与插入的数的个数有关,为了考察块状链表本身,我们忽略这一点。首先,需要花费O(C)的时间定位到要插入的位置,接下来插

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值