跳跃表SkipLIst --基于并联的有序链表

跳表SkipList是一种随机化的数据结构,通过并联的链表实现快速排序。节点包含数据、左右上下指针,插入和删除操作在平均O(logn)时间内完成。插入时根据随机数决定是否创建跳跃层,删除最小或最大节点同样高效。
摘要由CSDN通过智能技术生成
跳表SkipLIst描述[完整的代码在最下方]

跳跃表SkipLIst,基于并联的链表,一种随机化的数据结构,在插入数据的同时就已经排好序,然后根据随机数产生上一层的跳跃层。(可以用来实现游戏排行榜)

SkipNode跳表节点的结构

SkipListNode

跳跃节点一共有,一个数据data域,左指针left域,右指针right域,上指针up域,下指针down域。


跳跃表的初始化

初始化


跳跃表的插入put(Integer k)

1.首先查找插入位置SkipListNode findLocation(Integer k);【小->大的顺序】

查找插入位置的思路如下:
a.从顶层开始查找(找到最后一个小于k的节点),(一层找不到,就下一层)
b.若是找到该节点的位置,就平移到最底层

2 .插入节点
3. 抛硬币,如果为正面,就把该节点复制到上一层中,作为跳跃节点;
  重复抛硬币,知道硬币为反面。


插入步骤演示:

1.首先创建一个跳跃表

初始化
2.插入第一个元素17

首先找到插入位置,在最底层插入元素17,并抛硬币,创建跳跃层,
下面创建了三层跳跃层情况。

插入17,三层跳跃层
3.插入第二个元素28

找到该元素在最底层的插入位置,插入;并抛硬币,第一次就是反面,故不用往上创建跳跃节点:

插入28
4.插入第三个元素23

找到该元素在底层的插入位置,插入;并抛硬币,随机网上创建跳跃节点,如图:

插入23
5.然后依次类推

最终结果图

基于跳表的插入,时间复杂度是O(logn),
  解释:创建一个新的跳跃层的概率为0.5;若有n个元素,则该链表最有有log2n层,在查找到插入位时,每层的比较次数是一个常数C,所以找到底层插入位置的总体比较次数为Clog2n。


跳跃表的删除最小节点deleteFIrst()【插入按从小到大顺序】

首先找到最底层的左边界节点,
如果该表不为空,从底层开始往上循环,依次删除最小的节点
时间复杂度为O(logn)


跳跃表的删除最小节点deleteLast()【插入按从小到大顺序】

首先找到最底层的右边界节点,
如果该表不为空,从底层开始往上循环,依次删除最大的节点
时间复杂度为O(logn)


SkipListNode.java
package 跳表;

public class SkipListNode {
   
	
	public Integer key;   //关键值

    public SkipListNode left;  //左指针
    public SkipListNode right;	//右指针
    public SkipListNode up;	//上指针
    public SkipListNode down;	//下指针

    public static int negInf = Integer.MIN_VALUE; //边界值
    public static int posInf = Integer.MAX_VALUE; //边界值

    //构造器
    public SkipListNode(Integer key) {
   
        this.key = key;
        this.left = this.right = this.up = this.down = null;
    }

	public Integer getKey() {
   
		return key;
	}

	public void setKey(Integer key) {
   
		this.key = key;
	}

	@Override
	public String toString() {
   
		return "[key=" + key + "]";
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值