go语言-数据结构之跳表

本文详细介绍了Go语言中实现跳表的数据结构及其操作,包括搜索、添加和删除元素的方法。跳表是一种利用空间换取时间效率的数据结构,其查询、插入和删除操作的时间复杂度均为O(logn)。文章通过代码展示了如何初始化、随机生成层级以及执行基本操作,揭示了跳表在Redis和LevelDB等数据库系统中的应用。
摘要由CSDN通过智能技术生成

go语言-数据结构之跳表


本文所有的图来自于力扣1206.设计快表中的官方题解


为什么要跳表?

​在单链表中,我们查找元素时,需要从链表头开始从前向后遍历,查找的时间复杂度为O(n)
在这里插入图片描述

​跳表可以被看做二叉树的一个变种,它在性能上和红黑树、AVL 树不相上下,目前在 Redis 和LevelDB 中都有用到。跳表的期望空间复杂度为O(n),跳表的查询,插入和删除操作的期望时间复杂度均为O(logn)。

​主要使用空间换时间的思想,形成层级形式的链表

在这里插入图片描述

跳表的操作

结构体、初始化和随机函数
const maxLevel = 32
const pFactor = 0.25

type SkipListNode struct {
   
	val int //节点的值
	next []*SkipListNode	//节点各层级列表,并且存的是各层级的下一个节点
}

type Skiplist struct {
   
	head *SkipListNode //假头节点
	level int	//最大层级
}

func Constructor() Skiplist {
   
	return Skiplist{
   &SkipListNode{
   -1, make([]*SkipListNode, maxLevel)}, 0}
}

//通过期望p,随机层级
func (Skiplist) randomLevel() int {
   
	lv := 1
	for lv < maxLevel && rand.Float64()</
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值