//skipnode.h头文件:
#include<vector>
using namespace std;
struct skipnode//表示一个结点的结构体
{
int data;//元素的值
int level;//层数
vector<skipnode * >p;//存结点指针的数组
skipnode(int datain=0,int levelin=1){//构造函数
setnode(datain,levelin);
}
void setnode(int datain=0,int levelin=1){//设置数据成员,设置数组p的长度并在里面赋空值
data=datain;
level=levelin;
while(!p.empty())
p.pop_back();
for(int i=0;i<level;i++){
p.push_back(NULL);
}
}
};
//skiplist.h头文件:
#include<vector>
#include<iostream>
#include <stdlib.h>
#include <time.h>
#include <cmath>
#include "skipnode.h"
using namespace std;
class skiplist
{
int level,maxlevel;
int tailkey;
skipnode * head;
skipnode * tail;
public:
skiplist(int tailkeyin=2000000,int inmaxlevel=30){//构造函数,构造一个空跳跃表
level=1;
tailkey=tailkeyin;
maxlevel=inmaxlevel;
head=new skipnode(-1,maxlevel+1);
tail=new skipnode(tailkeyin,maxlevel+1);
for(int i=0;i<maxlevel;i++){
head->p.at(i)=tail;
}
}
~skiplist(){//析构函数
clear();
delete head;
delete tail;
}
int getlevel(){//获取当前跳跃表的层数
return level;
}
void clear(){//清空跳跃表
if(head->p.at(0)!=tail){
skipnode * ptr=head->p.at(0);//游