package com.db.one;
import java.util.Random;
public class SkipList<T extends Comparable<? super T>> {
private int level;
private int length;
private SkipNode<T> header;
private static int MAX_LEVEL = 10;
Random ram = new Random();
public SkipList(){
this(MAX_LEVEL);
}
@SuppressWarnings("unchecked")
public SkipList(int maxLevel){
level = maxLevel;
header = new SkipNode(0,level);
for (int i = 0; i< this.header.getLevel(); i++) {
this.header.setForward(i, null);
}
}
public int getRandom(int min, int max)
{
return ram.nextInt(max) % (max - min + 1) + min;
}
@SuppressWarnings("unchecked")
public void insert(T key){
int nodeLevel = this.getRandom(1, level);
SkipNode<T> newNode = new SkipNode<T>(key,nodeLevel);
SkipNode<T>[] temp = new SkipNode[level];
SkipNode<T> ptr = header;
for(int i = level - 1;i>=0;--i){
//倒序遍历
while(ptr.getForward(i)!=null&&ptr.getForward(i).getKey().compareTo(key) < 0){
//直到最后一个比要插入值大的节点
ptr = ptr.getForward(i);
}
temp[i] = ptr;
}
//将新节点插入对应位置 并设置好跳跃表
for(int i=0;i<nodeLevel;++i){
newNode.setForward(i, temp[i].getForward(i));
temp[i].setForward(i, newNode);
}
System.out.println(key);
}
public T search(T key){
SkipNode<T> ptr = header;
int tempLevel = level-1;
while(tempLevel >= 0 && ptr.getForward(tempLevel) != null){
if(key.equals(ptr.getForward(tempLevel).getKey())){
return ptr.getForward(tempLevel).getKey();
}
else if(key.compareTo(ptr.getForward(tempLevel).getKey()) < 0){
//进入下一层
--tempLevel;
}else{
ptr = ptr.getForward(tempLevel);
}
}
return null;
}
}
跳表(skiplist)Java实现
需积分: 45 158 浏览量
2015-11-27
14:29:07
上传
评论
收藏 1KB RAR 举报
cf353377036
- 粉丝: 1
- 资源: 17
最新资源
- springboot-mavenBaseDemo 内容包含:springboot的maven基础状态,1.8JDK可以直接运行
- otis rsl远程串行接口协议标准.pdf
- buildx构建镜像时所需的镜像文件
- F103-霸道开发板2.8寸电阻触摸屏例程.rar
- Google(高德)地图瓦片python代码下载
- Python实现输出杨辉三角形
- polsarpro官方教程、操作说明 PolSARpro v5.0 Software Training Course
- STM32 TouchGFX的使用二图片显示
- buildx镜像文件,也可以通过网上其他方式获取
- 【中级软件设计师】上午题12-软件工程(2):单元测试、黑盒测试、白盒测试、软件运行与维护
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈