zoukankan      html  css  js  c++  java
  • 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
    这个代码我没有做过多的备注,其实只要你理解了链表的各种操作方法的基本原理,这些代码还是非常容易懂的。

    笨鸟先飞
  • 相关阅读:
    MVP福利利用Azure虚拟机玩Windows Server 2012
    负载均衡的基本算法
    RavenDB:基于Windows/.NET平台的NoSQL数据库
    使用Autofac在ASP.NET Web API上实现依赖注入
    Mono 3 的默认Gc是Sgen
    MSDN 杂志 Windows 8 特刊
    AggSharp Agg的.NET 移植
    使用谷歌翻译/微软翻译迅速使你的博客支持多国语言
    Service Bus for Windows server
    用Xwt构建跨平台应用程序[转载]
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/13906293.html
Copyright © 2011-2022 走看看