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

定义

循环单链表与单链表唯一的不同就是其最后一个结点并非None,而是指向第一个结点(如果有头结点,就是指向头结点)

python实现

创建循环单链表

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()

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

循环单链表首端插入元素

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    '''首端插入元素'''
    def InsertElementInHead(self):
        element = input("请输入要插入的值:")
        cNode = self.head
        nNode = Node(int(element))
        nNode.next = cNode.next    
        cNode.next = nNode
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.InsertElementInHead()

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

循环单链表尾端插入元素

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    '''尾端插入元素'''
    def InsertElementInTail(self):
        element = input("请输入要插入的值:")
        cNode = self.head
        nNode = Node(int(element))
        while cNode.next != self.head:
            cNode = cNode.next
        nNode.next = self.head    
        cNode.next = nNode
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.InsertElementInTail()

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

删除循环单链表指定元素

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    '''删除指定元素'''
    def DeleteElement(self):
        element = int(input("请输入要删除的值:"))
        cNode = self.head
        pNode = self.head
        while cNode.next !=self.head and cNode.data != element:
            pNode = cNode
            cNode = cNode.next
        if cNode.data == element:
            pNode.next= cNode.next
            del cNode
            print('删除成功')
        else:
            print('删除失败')
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.DeleteElement()

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

获取循环单链表长度

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    '''获取循环单链表长度'''
    def GetLength(self):
        cNode = self.head
        length = 0
        while cNode.next !=self.head :
            length = length+1
            cNode = cNode.next
        return length
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.GetLength()

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

判断链表是否为空

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        if data == "#":
            cNode.next = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    def GetLength(self):
        cNode = self.head
        length = 0
        while cNode.next !=self.head :
            length = length+1
            cNode = cNode.next
        return length
    
    '''判断链表是否为空'''
    def IsEmpty(self):
        if self.GetLength()== 0:
            return True
        else:
            return False
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.IsEmpty()

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

销毁循环单链表

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        if data == "#":
            cNode.next = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    def GetLength(self):
        cNode = self.head
        length = 0
        while cNode.next !=self.head :
            length = length+1
            cNode = cNode.next
        return length
    
    '''判断链表是否为空'''
    def IsEmpty(self):
        if self.GetLength()== 0:
            return True
        else:
            return False
    
    '''销毁循环单链表'''
    def DestoryCircularSingleLinkedList(self):
        cNode = self.head
        cNode.next = self.head
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.DestoryCircularSingleLinkedList()
CircularSingleList.IsEmpty()

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

在表中指定位置插入结点

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        if data == "#":
            cNode.next = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    def GetLength(self):
        cNode = self.head
        length = 0
        while cNode.next !=self.head :
            length = length+1
            cNode = cNode.next
        return length
    
    '''输入的位置不是首端,也不是尾端,且有效'''        
    def InsertElement(self):
        index = int(input('请输入要插入的位置:'))
        key = int(input("请输入要插入的值:"))
        cNode = self.head
        pNode = self.head  # 前一个结点
        pos = 0
        while cNode.next != self.head and pos < index:
            pNode = cNode
            cNode = cNode.next
            pos += 1
        if index == pos:
            qNode = Node(key)
            pNode.next = qNode
            qNode.next = cNode
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.InsertElement()
CircularSingleList.GetLength()

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

获取表中指定位置结点的值

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        if data == "#":
            cNode.next = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    def GetLength(self):
        cNode = self.head
        length = 0
        while cNode.next !=self.head :
            length = length+1
            cNode = cNode.next
        return length
    
    '''获取表中指定位置结点的值'''        
    def GetElement(self):
        index = int(input('请输入要插入的位置:'))
        cNode = self.head
        pos = 0
        while cNode.next != self.head and pos < index:
            cNode = cNode.next
            pos += 1
        if index == pos:
            return cNode.data
        
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList. GetElement()

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

遍历循环单链表

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None    
class CircularSingleLinkedList:
    def __init__(self):
        self.head = Node(None)
        
    '''创建循环单链表'''
    def CreateCircularSingleLinkedList(self):
        data = input("请输入结点的值(按#结束输入):")
        cNode = self.head
        if data == "#":
            cNode.next = self.head
        while data != "#":
            nNode = Node(int(data))
            cNode.next = nNode
            nNode.next = self.head
            cNode = cNode.next
            data = input("请输入结点的值(按#结束输入):")
            
    def GetLength(self):
        cNode = self.head
        length = 0
        while cNode.next !=self.head :
            length = length+1
            cNode = cNode.next
        return length
    
    '''判断链表是否为空'''
    def IsEmpty(self):
        if self.GetLength()== 0:
            return True
        else:
            return False
    
    def VisitElement(self,tNode):
        if tNode!= self.head:
            print(tNode.data,'->',end= ' ')
    def TravelElement(self):
        cNode = self.head
        if self.IsEmpty():
            print('单链表为空')
            return
        print('单链表如下:')
        print('head->',end= ' ')
        while cNode.next != self.head:
            cNode = cNode.next  # 头结点没有数据
            self.VisitElement(cNode)
        print('head')
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.TravelElement()

结果:
在这里插入图片描述
具体实例可点此链接查看:
https://blog.csdn.net/weixin_40283816/article/details/87557067

扫描二维码关注公众号,回复: 5291423 查看本文章

猜你喜欢

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