python與資料結構-單鏈表
阿新 • • 發佈:2018-12-09
https://www.bilibili.com/video/av21540971/?p=10
1、python 中變數標識的本質
python 中等號的本質就是一個"引用連結”(變數皆指標),【與c和c++不一樣,c、c++是&表示地址,指標】
2、
3、遍歷連結串列(cur-遊標(指標))
4、頭插法(在連結串列頭部插上新的元素)
5、pre=self.__head
指的是:pre指向100這個節點,在python中,=表示指向,把._head的指向改為pre指向
6、一個節點的下一個節點:後繼節點
程式碼:
#單鏈表的結點 class Node(object): #節點 def __init__(self,elem): self.elem=elem#存放資料元素 self.next=None#下一個節點的標識 class SingleLinkList(object): #單鏈表 def __init__(self,node=None): self.__head = node #起始節點 私有屬性,外部無法訪問 def is_empty(self):#物件方法 return self.__head == None #連結串列是否為空 def length(self): #cur 遊標,用來移動遍歷節點 cur=self.__head #count記錄數量 count=0 while cur!=None: count+=1 cur =cur.next return count #連結串列長度 def travel(self): #遍歷整個連結串列 cur=self.__head while cur!=None: print(cur.elem,end=" ") cur=cur.next def add(self,item): #連結串列頭部新增元素 "頭插法" node=Node(item) node.next=self.__head self.__head=node def append(self,item):#item是元素 #連結串列尾部新增元素 -----尾插法 node=Node(item)#元素變為節點 if self.is_empty(): self.__head=node else: cur=self.__head while cur.next!=None: cur=cur.next cur.next=node def insert(self,pos,item): #指定位置新增元素 """ :param pos:從0開始 """ if pos<0: self.add(item) elif pos>(self.length()-1): self.append(item) else: node=Node(item) pre=self.__head count=0 while count<(pos-1): count=count+1 pre=pre.next #當迴圈退出後,pre指向pos-1 node.next=pre.next pre.next=node def remove(self,item): #刪除節點 cur=self.__head pre=None while cur!=None: if cur.elem==item: #判斷此節點是否是頭結點 if cur==self.__head: self.__head=cur.next else: pre.next=cur.next break else: pre=cur cur=cur.next def search(self,item): cur=self.__head while cur !=None: if cur.elem == item: return True else: cur=cur.next return False if __name__=="__main__": ll= SingleLinkList() print(ll.is_empty()) print(ll.length()) ll.append(1) print(ll.is_empty()) print(ll.length()) ll.append(2) ll.add(8) ll.append(3) ll.append(4) ll.append(5) ll.append(6) ll.insert(-1,9) ll.insert(3,100) ll.insert(10,200) ll.travel() ll.remove(1) print("") ll.travel()