Python實現單鏈表數據的添加、刪除、插入操作
鏈表的定義:
鏈表(linked list)是由一組被稱為結點的數據元素組成的數據結構,每個結點都包含結點本身的信息和指向下一個結點的地址。由於每個結點都包含了可以鏈接起來的地址信息,所以用一個變量就能夠訪問整個結點序列。也就是說,結點包含兩部分信息:一部分用於存儲數據元素的值,稱為信息域;另一部分用於存儲下一個數據元素地址的指針,稱為指針域。鏈表中的第一個結點的地址存儲在一個單獨的結點中,稱為頭結點或首結點。鏈表中的最后一個結點沒有后繼元素,其指針域為空。
當一個序列中只含有指向它的后繼結點的鏈接時,就稱該鏈表為單鏈表。
單鏈表的結構示意圖如下:
代碼如下:
#結點定義 class Node(object): def __init__(self,val,p=0): self.data = val self.next = p #鏈表操作 class LinkList(object): #定義頭結點 def __init__(self): self.head = 0 def __getitem__(self, key): if self.is_empty(): print('鏈表為空!') return elif key <0 or key > self.getlength(): print('鍵入值錯誤!') return else: return self.getitem(key) def __setitem__(self, key, value): if self.is_empty(): print('鏈表為空!') return elif key <0 or key > self.getlength(): print('鍵入值錯誤!') return else: self.delete(key) return self.insert(key) #初始化鏈表 def initlist(self,data): self.head = Node(data[0]) p = self.head for i in data[1:]: node = Node(i) p.next = node p = p.next #獲取鏈表長度 def getlength(self): p = self.head length = 0 while p!=0: length+=1 p = p.next return length #判斷鏈表是否為空 def is_empty(self): if self.getlength() ==0: return True else: return False def clear(self): self.head = 0 #單鏈表添加操作,在尾部添加結點 def append(self,item): #q為待添加的結點 q = Node(item) if self.head ==0: self.head = q else: p = self.head while p.next!=0: p = p.next p.next = q #獲取結點數據域的值 def getitem(self,index): if self.is_empty(): print('鏈表為空!') return j = 0 p = self.head while p.next!=0 and j <index: p = p.next j+=1 if j ==index: return p.data else: print('對象不存在!') #鏈表數據插入操作 def insert(self,index,item): if self.is_empty() or index<0 or index >self.getlength(): print('鏈表為空!') return if index ==0: q = Node(item,self.head) self.head = q p = self.head post = self.head j = 0 while p.next!=0 and j<index: post = p p = p.next j+=1 if index ==j: q = Node(item,p) post.next = q q.next = p #鏈表數據刪除操作 def delete(self,index): if self.is_empty() or index<0 or index >self.getlength(): print('鏈表為空!') return if index ==0: q = Node(item,self.head) self.head = q p = self.head post = self.head j = 0 while p.next!=0 and j<index: post = p p = p.next j+=1 if index ==j: post.next = p.next def index(self,value): if self.is_empty(): print('鏈表為空!') return p = self.head i = 0 while p.next!=0 and not p.data ==value: p = p.next i+=1 if p.data == value: return i else: return -1 link = LinkList() link.initlist([1,2,3,4,5]) print(link.getitem(4)) link.append(6) print(link.getitem(5)) link.insert(4,40) print(link.getitem(3)) print(link.getitem(4)) print(link.getitem(5)) link.delete(5) print(link.getitem(5)) link.index(5)
運行結果:
參考資料:
https://www.cnblogs.com/yupeng/p/3413763.html