数据结构之python实现循环单链表实例

题目如下:

在这里插入图片描述

python实现:

import random
class CLNode:
    def __init__(self,name):
        self.name = name
        self.next = None    
class CSLL:
    def __init__(self):
        self.head = CLNode(None)
        
    '''创建循环单链表'''
    def CreateCSLL(self):
        Element = input("请输入姓名(按回车确定,按#结束输入):")
        cNode = self.head
        while Element != "#":
            nNode = CLNode(Element)
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            Element = input("请输入姓名(按回车确定,按#结束输入):")
    '''遍历循环双链表'''
    def TraverseCSLL(self):
        print("当前参与者共有",self.GetLength(),"人,分别为:")
        cNode = self.head.next
        while cNode.next != self.head:
            print(cNode.name,'->',end= ' ')
            cNode = cNode.next  
        print(cNode.name)
    '''获取循环双链表长度'''
    def GetLength(self):
        cNode = self.head
        length = 0
        while cNode.next !=self.head :
            length = length+1
            cNode = cNode.next
        return length
    '''抽奖过程'''
    def Lottery(self):
        pNode = self.head
        cNode = self.head.next  # 拿彩球的人
        count = self.GetLength() # 每次淘汰后剩余的参与者
        total = self.GetLength() # 总参与者
        while count != 1:
            randomNum = random.randint(0,100)
            print("第",total-count+1,"轮抽取的随机数为:",randomNum)
            transNum = randomNum % count
            while transNum != 0:
                if cNode == self.head:
                    pNode = cNode
                    cNode = cNode.next
                cNode = cNode.next 
                pNode = cNode
                cNode = cNode.next
                transNum = transNum-1
            if cNode == self.head:
                    pNode = cNode
                    cNode = cNode.next
            print("被淘汰的参与者为:",cNode.name)
            pNode.next = cNode.next
            del cNode
            cNode = pNode.next
            count = self.GetLength()
        print("最终赢得大奖的参与者是:",cNode.name)
if __name__=='__main__':
    CSL = CSLL()
    CSL.CreateCSLL()
    CSL.TraverseCSLL()
    CSL.Lottery()

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40283816/article/details/87557067