链表&跳跃表

本文介绍了链表和跳跃表的概念、优缺点及适用场景。链表适合元素频繁插入或删除,而跳跃表通过多层索引提高了查找效率,达到近似O(logN)的时间复杂度。在Redis的Sorted-Set中,跳跃表被用于优化查找。相比于平衡树,跳跃表的插入和删除操作更为简单,内存占用也更灵活,但在单个key查找上与平衡树相当,优于哈希表。
摘要由CSDN通过智能技术生成

承接第一篇对数组的一些概念总结,这一篇会简单地对链表还有跳跃表(一种多层的有序链表)进行总结。陆续还会总结与这两种结构相关的题目和例子。

链表

概念:

​ 链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现的。每个结点包括存储元素的数据域,还有指向下一个结点地址的指针域。

优点:

  • 添加或删除元素的速度快,因为只需要改变前后两个元素结点的指针域指向地址即可

缺点:

  • 查询元素时需要遍历链表元素来查找,效率不高。(跳跃表在一定程度上解决了这个问题)

适用场景:

链表适用于元素频繁插入或删除,还有大内存空间分配的场景。

跳跃表

概念:

跳跃表/跳表是有序链表的一种变形,它以二分查找的思想在一定程度上优化了链表查找元素效率不高的问题。采取了空间换时间的策略。

跳跃表查找元素的思路:

假如我们现在有一个长度为10的有序链表,按照一定的规则取出一半的节点作为第二层节点索引,然后我们先在这一层进行查找,这样如果我们是要查找第十个节点的值,我们只需要比较第二层的五个节点的值即可(如果我们是要查找第九个节点的值,我们也是先在第二层比较五个节点的值,再回到原来的链表比较一次即可)这比我们直接遍历整个链表比较十个节点的效率要高的多。我们还可以通过在第二层节点上再取一半的节点作为第三层,再接

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值