数据结构之python实现单链表

定义

一个典型的单链表:
在这里插入图片描述
其中头结点数据域默认为空,也可用于存放单链表长度之类的数据;指针域用来存放第一个结点的地址。最后一个结点的指针域默认为空。

python实现

创建单链表以及在尾端插入一个结点

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
        
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束:")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束:") 
               
    '''在单链表尾端插入一个数据'''
    def InsertElementInTail(self):
        cNode = self.head 
        Element= input("请输入尾端要插入的数据:")
        nNode = Node(int(Element))
        while cNode.next != None:
            cNode = cNode.next 
        cNode.next = nNode
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.InsertElementInTail()         

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

在表中首端插入一个结点

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
        
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束:")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束:") 
            
    '''在表中首端插入某一结点'''       
    def InsertElementHead(self):
        cNode = self.head 
        Element= input("请输入首端要插入的数据:")
        nNode = Node(int(Element))
        cNode.next = nNode
        nNode.next = cNode.next
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.InsertElementHead()

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

获取单链表长度

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
        
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束:")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束:") 
            
    '''获取链表长度'''
    def Getlength(self):
        cNode = self.head
        length = 0
        while cNode.next != None:
            length+=1
            cNode = cNode.next
        return length   
        
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
length = linkedlist.Getlength()
length

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

判断单链表是否为空

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束:")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束:") 
    def Getlength(self):
        cNode = self.head
        length = 0
        while cNode.next != None:
            length+=1
            cNode = cNode.next
        return length 
    
    '''判断单链表是否为空'''
    def IsEmpty(self):
        if self.Getlength() ==0:
            return True
        else:
            return False
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.IsEmpty()

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

在表中查找某一指定结点

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束") 
    def Getlength(self):
        cNode = self.head
        length = 0
        while cNode.next != None:
            length+=1
            cNode = cNode.next
        return length   
    def IsEmpty(self):
        if self.Getlength() ==0:
            return True
        else:
            return False
    def FindElement(self):
        pos = 0
        cNode = self.head
        key = int(input('请输入要查找的值:'))
        if self.IsEmpty():
            print('单链表为空')
            return
        while cNode.next != None and  cNode.data != key:
            cNode = cNode.next
            pos+=1
        if cNode.data == key:
            print('查找成功,位置为:',pos)
        else:
            print('查找失败')
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.FindElement()

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

删除表中某一结点

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束")
    def Getlength(self):
        cNode = self.head
        length = 0
        while cNode.next != None:
            length+=1
            cNode = cNode.next
        return length 
    def IsEmpty(self):
        if self.Getlength() ==0:
            return True
        else:
            return False       
    def DeleteElement(self):
        if self.IsEmpty():
            print('单链表为空')
            return
        key = int(input('请输入要删除的值:'))
        cNode = self.head
        pNode = self.head              # 当前结点的前一个结点
        while cNode.next != None and cNode.data != key:
            pNode = cNode
            cNode = cNode.next
        if cNode.data == key:
            pNode.next = cNode.next
            del cNode
            print('删除成功')
        else:
            print('删除失败')
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.DeleteElement()
length = linkedlist.Getlength()
print('链表长度为:',length)

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

遍历表中所有结点

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束")
    def VisitElement(self,vNode):
        if vNode!= None:
            print(vNode.data,'->',end= ' ')
        else:
            print('None')
    def TraverseElement(self):
        cNode = self.head
        if cNode.next ==None:
            print('单链表为空')
            return
        print('单链表如下:')
        while cNode != None:
            cNode = cNode.next  # 头结点没有数据
            self.VisitElement(cNode)
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.TraverseElement()

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

销毁单链表

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束") 
    def ClearElement(self):
        '''销毁单链表'''
        self.head = 0
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.ClearElement()        

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

在表中指定位置插入一个结点

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
        
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束") 
            
    def VisitElement(self,vNode):
        if vNode!= None:
            print(vNode.data,'->',end= ' ')
        else:
            print('None')
            
    def TraverseElement(self):
        cNode = self.head
        if cNode.next ==None:
            print('单链表为空')
            return
        print('单链表如下:')
        while cNode != None:
            cNode = cNode.next  # 头结点没有数据
            self.VisitElement(cNode)
            
    '''输入的位置不是首端,也不是尾端,且有效'''        
    def InsertElement(self):
        index = int(input('请输入要插入的位置:'))
        key = int(input("请输入要插入的值:"))
        cNode = self.head
        pNode = self.head  # 前一个结点
        pos = 0
        while cNode.next != None and pos < index:
            pNode = cNode
            cNode = cNode.next
            pos += 1
        if index == pos:
            qNode = Node(key)
            pNode.next = qNode
            qNode.next = cNode
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.InsertElement()
linkedlist.TraverseElement()

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

获取表中指定位置的值

class Node:
    '''初始化一个节点'''
    def __init__(self,data):
        self.data = data
        self.next = None
class SingleLinkedList:
    '''初始化头节点'''
    def __init__(self):
        self.head = Node(None)
        
    '''创建单链表'''
    def CreateSingleLinkedList(self):
        cNode = self.head
        Element= input("请输入数据按回车键确认,按#结束")
        while Element != '#':
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element= input("请输入数据按回车键确认,按#结束") 
            
    def GetElement(self):
        index = int(input('请输入要插入的位置:'))
        cNode = self.head
        pos = 0
        while cNode.next != None and pos < index:
            pNode = cNode
            cNode = cNode.next
            pos += 1
        if index == pos:
            return cNode.data
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
result = linkedlist.GetElement() 
print(result)

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

猜你喜欢

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