跳跃表(Skip List)的实现及测试 C++实现

本文介绍了使用C++实现跳跃表的数据结构,并对其插入、查找和删除操作进行了详细说明。通过随机实验,展示了在不同概率因子下,跳跃表的平均层数和操作性能,为数据存储和检索提供了高效的解决方案。
摘要由CSDN通过智能技术生成
//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);//游
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值