承接第一篇对数组的一些概念总结,这一篇会简单地对链表还有跳跃表(一种多层的有序链表)进行总结。陆续还会总结与这两种结构相关的题目和例子。
链表
概念:
链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现的。每个结点包括存储元素的数据域,还有指向下一个结点地址的指针域。
优点:
- 添加或删除元素的速度快,因为只需要改变前后两个元素结点的指针域指向地址即可
缺点:
- 查询元素时需要遍历链表元素来查找,效率不高。(跳跃表在一定程度上解决了这个问题)
适用场景:
链表适用于元素频繁插入或删除,还有大内存空间分配的场景。
跳跃表
概念:
跳跃表/跳表是有序链表的一种变形,它以二分查找的思想在一定程度上优化了链表查找元素效率不高的问题。采取了空间换时间的策略。
跳跃表查找元素的思路:
假如我们现在有一个长度为10的有序链表,按照一定的规则取出一半的节点作为第二层节点索引,然后我们先在这一层进行查找,这样如果我们是要查找第十个节点的值,我们只需要比较第二层的五个节点的值即可(如果我们是要查找第九个节点的值,我们也是先在第二层比较五个节点的值,再回到原来的链表比较一次即可)这比我们直接遍历整个链表比较十个节点的效率要高的多。我们还可以通过在第二层节点上再取一半的节点作为第三层,再接