【发布时间】:2022-12-18 04:25:44
【问题描述】:
我试图在 python 中实现数据结构跳过列表,但有点卡住,特别是如何实现插入和打印功能(以可视化)。 非常欢迎任何帮助、提示和解释,因为我是初学者。我了解数据结构,也想了解实现。 想法是像这样打印 lvls 等级 0 -inf, 1, 2, 3, inf lvl 1 -inf, 2, inf lvl 2 -inf, inf
谢谢 !
导入数学
将随机导入为 rnd
skiplist 的 #node 类,如教师给出的那样,应该有指向:pred、next、down 的指针
类节点:
def __init__(self, key, value = None):
self.key = 键
自我价值=价值
self.next = 无
self.pred = 无
self.down = 无
类跳过列表:
def __init__(自我):
self.head = node(-math.inf)
self.tail = 节点(math.inf)
self.head.next = self.tail
self.tail.pred = self.head
self.length = 0
self.height = 1
def createLevel(self): #creates new frame lvl with only-inf/inf 作为节点
newHead = node(- math.inf)
newTail = 节点(math.inf)
newHead.next = newTail
newTail.pred = newHead
newHead.down = self.head
newTail.down = self.tail
self.head = newHead
self.tail = newTail
def newLevel(自我,水平):
如果水平 >= self.height :
self.height += 1
self.createLevel()
def coinFlip(self): #查看要插入多少lvls项目
x = rnd.randint(0, 1)
返回 x
def search(self, key): # search返回遍历到达k的节点栈
q = []
current_node = self.head
而 current_node.down != None :
current_node = current_node.down
而 current_node.next.key
到目前为止,我只能添加到 0 级,但是当我想使用 createLevel() 添加一个新级别时,该元素不会“放入”跳过列表中,更不用说在多个级别上添加一个元素了。
在打印功能上,我尝试了 2 个 for 循环,以及一个 for + while 循环(一个用于确定级别,然后在继续到下一个级别之前附加所有键)但我只实现了打印级别 0 和水平高度...
【问题讨论】:
标签: python python-3.x data-structures skip-lists