Redis-跳表

本文详细介绍了跳表的工作原理,通过分层查找和节点跳跃来提高查询效率,特别强调了其由头节点、多层结构和有序链表组成的特点,以及在查找、插入和删除操作中的优势。
摘要由CSDN通过智能技术生成

1、跳表

“多层有序链表”
image.png

跳表运行规则

使用分层有序链表,比如我们查找值为31的节点时,查找步骤如下:

  1. 从最高层第2层开始查找,1节点比31值要小,继续向后比较。
  2. 11节点比31节点要小,继续向后比较,这时会发现第2层11节点的next指针是指向NULL,所以在11节点就开始需要下降一层到第1层并继续向后查找节点进行比较。
  3. 在下降到第1层中,11节点的值比31要小,继续向后比较,第1层11节点的next指针指向26,26比31要小,继续向后比较,第1层26节点的next指针指向61,61比31要大,需要下降一层继续向后比较。
  4. 最后下降到了第0层,第0层的26节点的next指针指向31,31为我们要找的节点,节点被找到。

综上所述,通过将有序集合的部分节点分层,从最上层节点依次开始向后查找,如果本层的next节点大于我们要找的值或者next节点指向NULL,则从本节点开始,降低一层继续向后查找,如果找到则返回节点,否则返回NULL。采用该思想原理查找节点,在层数高及节点数量比较多时,可以跳过一些节点,查询效率会大大提升,这就是跳跃表的思想。

跳表性质

  • 跳跃表由很多层结构组成,最底层的节点个数为跳跃表的长度(length)。
  • 跳跃表有一个头节点(header),头节点中有一个32层的结构,每层的结构包括指向本层下个节点的指针。
  • 除头节点外,层数最多的节点的层高为跳跃表的高度(level),头节点初始化为32层,头节点中比跳跃表level层高的结构next指针指向NULL。
  • 每层都是一个有序链表,数据score递增
  • 除头节点header外,最底层(Level 0)的链表包含所有元素,节点每层的元素值一样,即上层有序链表中出现的元素一定会在下层有序链表中出现。
  • 跳跃表拥有一个tail指针,指向跳跃表最后一个节点,且每层最后一个节点都指向NULL,表示本层有序链表的结束。

总体而言,跳跃表最底层Level 0是一个有序链表,链表中每个节点维护了多个指向其他节点的指针。跳跃表进行查找、插入、删除操作时可以跳过一些节点,快速找下操作需要的节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值