python-单链表的实现

  在c语言中,我们有指针来进行链式结构袁旭之间的连接,而python没有指针,那么这个时候我们应该怎么来用python来实现单链表呢?

  这里我们可以用类来模拟指针,用类来定义一个节点类

 7 class Node(object): 
  8     def __init__(self,elem):
  9         self.elem = elem
 10         self.next = None

这样我们就可以通过创建对象来实现一个节点的创建,其实大家有咩有发现,在这个代码中类的作用与c语言中的结构体有着异曲同工的作用,其都是用来创建一个新节点。

链表我们也通过一个类来实现,利用各种方法来实现链表的各种操作。链表操作的原理和c语言中的操作原理是一样的,话不多说直接上代码。

 1 #******************************************************************    *******                                                            
  2   #> File Name: linklist.py
  3   #> Author: 邹庭荣
  4   #> Mail: 1198875194@qq.com 
  5   #> Created Time: 2020年10月30日 星期五 17时27分54秒
  6  #*****************************************************************    ********/
  7 class Node(object): 
  8     def __init__(self,elem):
  9         self.elem = elem
 10         self.next = None
 11 class linklist(object):
 12     def __init__(self,node = None):#链表的初始化
 13         self.__head = node
 14         self.curlen = 0 
 15     def empty(self):
 16         if self.head == None:
 17             raise Exception("链表为空")
 18     def len(self):
 19         return self.curlen
 20     def add_head(self,item):
 21         node = Node(item)
 22         node.next = self.__head
 23         self.__head = node
 24         self.curlen += 1
 25     def add_tail(self,item):
 26         node = Node(item) 
 27         tempnode = self.__head
 28         while tempnode != None:
 29             tempnode = tempnode.next
 30         tempnode.next = node
 31         self.curlen += 1
 32     def insert(self,location,item): 
 33         node = Node(item)
 34         if location < 0 or location > self.curlen - 1:
 35             raise Exception("插入位置非法")
 36         elif location == 0:
 37             self.add_head(item)
 38         elif location == self.curlen:
 39             tempnode = self.__head 
 40             while tempnode.next != None:
 41                 tempnode = tempnode.next
 42             tempnode.next = node
 43             self.curlen += 1
 44         else:
 45             tempnode = self.__head
 46             for i in range(location - 1):
 47                 tempnode = tempnode.next
 48             node.next = tempnode.next
 49             tempnode.next = node
 50             self.curlen += 1
 51     def delitem(self,item): 
 52         if self.__head.elem == item:
 53             self.__head = self.__head.next
 54         else:
 55             tempnode = self.__head
 56             
 57             while tempnode!= None:
 58                 if tempnode.next.elem == item:
 59                     break
 60                 tempnode = tempnode.next
 61             tempnode.next = tempnode.next.next
 62     def change(self,item,changed_item):
 63         tempnode = self.__head
 64         while tempnode != None: 
 65             if tempnode.elem == item:
 66                 tempnode.elem = changed_item
 67                 break
 68     def search(self,item):
 69         tempnode = self.__head
 70         while tempnode != None: 
 71             if tempnode.elem == item:
 72                 return True
73             tempnode = tempnode.next
 74         return False
 75     def display(self):
 76         tempnode = self.__head
 77         while tempnode != None:
 78             print(tempnode.elem,end = " ")
 79             tempnode = tempnode.next
 80         print()
 81 if __name__ == "__main__":
 82     linklist1 = linklist() 
 83     linklist1.add_head(1)
 84     linklist1.add_head(2)
 85     linklist1.insert(0,3)
 86     linklist1.display()
 87     print(linklist1.curlen)
 88     linklist1.delitem(2)
 89     linklist1.display()
 90     linklist1.change(3,4)
 91     print(linklist1.search(4))
 92     linklist1.display()            

运行结果:

3 2 1  
3
3 1
这个代码我没有做过多的备注,其实只要你理解了链表的各种操作方法的基本原理,这些代码还是非常容易懂的。

笨鸟先飞
原文地址:https://www.cnblogs.com/zoutingrong/p/13906293.html