跳表可以说是我最喜欢的数据结构了,一方面因为其优越的性能,无论是插入、删除操作还是数据查找,他的时间复杂度都是O(logn),要知道最优秀的二分查找算法的时间复杂度也是O(logn),另一方面跳表数据结构实现相对于红黑树来说足够的简单,同时他还支持O(logn)时间复杂度的范围查询,而红黑树的范围查询则没有这么高的效率。
跳表因为其优秀的综合性能,在以速度著称的Redis中的SortedSet有序集合也是采用了跳表这种数据结构来实现。
如果你还不了解跳表,那么让我们一起来学习这种优秀的数据结构吧!
现在给你一批无序的int类型数据,例如1,3,98,13,6,9,27,45,尝试设计一种高性能的数据结构存储这批数据,使其有序同时能够支持以下操作:
首先我们可以考虑用数组或者链表来存储上述数据:
针对有序的数组和链表,我们一起来看看数组和链表两种存储方式能否满足上述操作需求:
综上所述,可以很明显地看出来数组的特性就是查找快速,但是插入删除因为需要移动数组,所以性能相对较差,链表则是插入、删除快,但是前提是能找到那个要插入、删除的节点,而查询则需要遍历整个链表。
那么问题来了,能不能结合数组的