工作记录----关于跳表---小白也能看懂--图文并茂---再也不担心看源码看不懂咯~

跳表

用于按分数排序,每个节点包含一个分数和一个成员值。跳表是一种有序的链表,通过多层索引提高查询效率。

跳表(Skip List)是一种数据结构,用于在有序元素的集合中进行快速搜索、插入和删除操作。它是由 William Pugh 在 1990 年提出的,结合了有序链表和概率的思想,具有类似平衡树的特性,但实现起来相对简单。

结构特点:

  • 多层链表结构:跳表是多层的,每一层都是一个有序链表。
  • 索引层:每一层都是前一层的子集,从第一层到最高层,最底层是完整的链表。
  • 节点:节点包含元素值和指向下一层节点的指针,每层的节点都以升序排序。

添加元素过程:

  • 随机层数:在插入元素时,首先决定元素在跳表中的层数,使用随机算法确定元素的层数,通常使用随机数生成算法,如抛硬币或随机数生成器,决定一个元素在跳表中的层数。
  • 节点插入:从最高层开始,向下搜索应该插入元素的位置,并且在每一层找到应该插入的位置后,在对应层进行节点的插入操作,维护各层的有序性。

这个过程会根据随机层数和当前跳表结构,插入新元素并在不同层次上进行调整,保证有序性和平衡性,使得在跳表中快速进行元素搜索、插入和删除的操作。
工作记录----关于跳表---小白也能看懂--图文并茂---再也不担心看源码看不懂咯~_第1张图片
工作记录----关于跳表---小白也能看懂--图文并茂---再也不担心看源码看不懂咯~_第2张图片

import java.util.Random;
//这段代码定义了一个名为SkipListNode的类,用于表示跳表中的节点。每个节点包含一个整数值value和一个指向下一层节点的数组next。构造方法接受一个值和层数作为参数,并根据层数创建对应长度的next数组。
class SkipListNode {
   
    int value;
    SkipListNode[] next;

    public SkipListNode(int value, int level) {
   
        this.value = value;
        this.next = new SkipListNode[level];
    }
}
//这段代码定义了一个名为SkipList的类,表示跳表数据结构。它包含了最大层数(常量MAX_LEVEL)、当前跳表的最大层级(levelCount)和头节点(head)。在构造方法中,通过创建一个值为-1、层数为最大层数的头节点来初始化跳表。
public class SkipList {
   
    private static final int MAX_LEVEL = 16; // 最大层数
    private int levelCount = 1;
    private SkipListNode head;

    public SkipList() {
   
        head = new SkipListNode(-1, MAX_LEVEL);
    }

    // 生成随机层数
    private int randomLevel() {
   
        int level = 1;
        while (Math.random() < 0.5 && level < MAX_LEVEL) {
   
            level++;
        }
        return level;
    }

    public 

你可能感兴趣的:(工作,java)