• python链表的实现


    根据Problem Solving with Algorithms and Data Structures using Python 一书用python实现链表

    书籍在线网址http://interactivepython.org/runestone/static/pythonds/index.html

    中文翻译书籍:https://facert.gitbooks.io/python-data-structure-cn/

      1 class Node:     #链表中单个节点的实现
      2     def __init__(self,initdata):
      3         self.data=initdata
      4         self.next=None
      5 
      6     def getDate(self):      #获取当前节点数据域值
      7         return self.data
      8 
      9     def getNext(self):      #获取指向下一个节点的指针域值
     10         return self.next
     11 
     12     def setData(self,newdata):  #重新设置当前节点数据域值
     13         self.data=newdata
     14 
     15     def setNext(self,newnext):  #重新设置当前节点指针域指针指向
     16         self.next=newnext
     17 
     18 class UnorderedList:
     19     def __init__(self):     #初始化无序列空表
     20         self.head=None
     21 
     22     def isEmpty(self):
     23         return self.head==None
     24 
     25     def add(self,item):     #使用头插法将节点插入链表
     26         temp=Node(item)
     27         temp.setNext(self.head)
     28         self.head=temp
     29 
     30     def append(self,item):      #使用尾插法将节点插入链表
     31         temp=Node(item)
     32         if self.isEmpty():  #链表为空直接将头指针指向新的节点
     33             self.head=temp
     34         else:
     35             current=self.head
     36             while current.getNext()!=None:  #遍历一遍链表中节点
     37                 current=current.getNext()
     38             current.setNext(temp)           #最后将节点插入链表尾部
     39 
     40     def size(self):        #统计节点数
     41         current=self.head
     42         count=0
     43         while current!=None:
     44             count+=1
     45             current=current.getNext()
     46         return count
     47 
     48     def travel(self):   #遍历链表
     49         print('遍历链表')
     50         current=self.head
     51         list1=[]
     52         while current!=None:
     53             list1.append(current.getDate())
     54             current=current.getNext()
     55         print(list1)
     56 
     57     def search(self,item):  #搜索节点,返回Boolean值类型
     58         current=self.head
     59         found=False
     60         while current!=None and not found:
     61             if current.getDate() ==item:
     62                 found=True
     63             else:
     64                 current=current.getNext()
     65         return found
     66 
     67     def index(self,item): #搜索节点,返还节点所在索引值
     68         current=self.head
     69         count=0
     70         found=None
     71         while current!=None and not found:
     72             count+=1
     73             if current.getDate()==item:
     74                 found=True
     75             else:
     76                 current=current.getNext()
     77         if found:
     78             return count
     79         else:
     80             str1='%s is not in theList'%item
     81             return str1
     82 
     83     def remove(self,item):
     84         current=self.head
     85         previous=None
     86         found=False
     87         while not found:
     88             if current.getDate()==item:
     89                 found=True
     90             else:
     91                 previous=current
     92                 current=current.getNext()
     93         if previous==None:      #删除的为第一个节点
     94             self.head=current.getNext()
     95         else:                   #删除的不是第一个节点
     96             previous.setNext(current.getNext())
     97 
     98     def insert(self,pos,item):  #在链表指定位置插入节点
     99         if pos<=1:              #需要在第一个索引处插入节点,只需使用头插法将节点插入链表
    100             self.add(item)
    101         elif pos>self.size():   #如果插入的位置大于链表长度,尾插法插入节点
    102             self.append(item)
    103         else:
    104             temp=Node(item)
    105             count=1
    106             pre=None
    107             current=self.head
    108             while count<pos:    #在链表中间插入需要用一个前置指针和当前指针分别遍历指向插入点和插入点前部
    109                 count+=1
    110                 pre=current
    111                 current=current.getNext()
    112             pre.setNext(temp)
    113             temp.setNext(current)
    114 
    115 if __name__=='__main__':
    116     a=UnorderedList()
    117     for i in range(10):
    118         a.append(i)    #此处用尾插法构造链表
    119         #a.add(i)     #头插法创建链表
    120     print('无序链表的大小为',a.size())
    121     a.travel()
    122     print('*********************')
    123     print('搜索无序链表中节点4',a.search(4))
    124     print('搜索无序链表中节点4的索引',a.index(4))
    125     print('移除无序链表中节点7')
    126     a.remove(7)
    127     a.travel()
    128     print('在索引5插入值为90的节点')
    129     a.insert(5,90)
    130     a.travel()
    131 
    132 
    133 #无序链表的大小为 10
    134 # 遍历链表
    135 # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    136 # *********************
    137 # 搜索无序链表中节点4 True
    138 # 搜索无序链表中节点4的索引 5
    139 # 移除无序链表中节点7
    140 # 遍历链表
    141 # [0, 1, 2, 3, 4, 5, 6, 8, 9]
    142 # 在索引5插入值为90的节点
    143 # 遍历链表
    144 # [0, 1, 2, 3, 90, 4, 5, 6, 8, 9]
  • 相关阅读:
    iOS ARC下命名规则
    performSelector may cause a leak because its selector is unknown
    performSelector may cause a leak because its selector is unknown
    Block的Retain Cycle的解决方法
    Block的Retain Cycle的解决方法
    iOS 5 ARC 入门
    iOS 5 ARC 入门
    Xcode 5 SVN配置
    Python基本语法_基本数据类型_序列类型详解
    Python基本语法_基本数据类型_序列类型详解
  • 原文地址:https://www.cnblogs.com/xiongxueqi/p/8604917.html
Copyright © 2020-2023  润新知