【问题标题】:Skip list implementation python跳过列表实现python
【发布时间】: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


    【解决方案1】:

    导入数学 将随机导入为 rnd

    #node class of skiplist, as given by instructor should have pointers to: pred, next, down 
    
    class node:                        
        def __init__(self, key, value = None):
            self.key = key
            self.value = value 
            self.next = None 
            self.pred = None
            self.down = None 
    
    class skipList:                
        def __init__(self):
            self.head = node(-math.inf)
            self.tail = node(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 as nodes
        newHead = node(- math.inf)
        newTail = node(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, levels):
        if levels >= self.height :         
            self.height += 1
            self.createLevel()
    
    def coinFlip(self):             #see how many lvls item to be inserted in
        x = rnd.randint(0, 1)
        return x 
    
    def search(self, key):    # search returns stack of nodes traversed to reach k 
        q = [] 
        current_node = self.head 
        while current_node.down != None :
            current_node = current_node.down
            while current_node.next.key 
    

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多