python 單鏈表的操作
阿新 • • 發佈:2018-11-01
單鏈表的基本操作
首先建立一個結點類的結構,以便後面的操作
class Node(object):
def __init__(self,data):
self.data=data
self.next=None
建立一個連結串列類
class LinkList(object): def __init__(self): self.head=Node(None) #判斷是否為空 def isEmpty(self): p=self.head#頭指標 if p.next==None: print("Link is Empty") return True return False #列印連結串列 def printLink(self): if self.isEmpty(): return False p=self.head while p: print(p.data,end='') p=p.next
建立單鏈表是一個動態生成連結串列的過程,就是從一個空的單鏈表開始,依次建立各個元素的結點,並把它們依次插入連結串列
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 LengthList(self):
if self.isEmpty():
return 0
p=self.head
cut=0
while p:
cut+=1
p=p.next
return cut
單鏈表的插入
假設我們要把結點q插入到結點p的後面,只要把結點q插入到結點p和結點p.next 之間就行。
只要讓q.next和p.next 指標改變,讓p的後繼結點改為q的後繼結點,再把q的後繼結點變成p的後繼結點,插入操作的順序不能打亂
def InsertList(self,s,data):
if self.isEmpty() or s<0 or s>self.LengthList():
print("Insert failed")
return
p=self.head
index=1
while index<s:
p=p.next
index+=1
node=Node(data)
node.next=p.next
p.next=node
表單的刪除
如果想要刪除結點q,其實就是把它的前繼結點p指標繞過q,直接指向q的後繼結點 如圖
讓p.next 直接為p 的next 的 next , p 的next 為q ,所有就是p.next=q.next
def DeleList(self,s):
if self.isEmpty() or s<0 or s>self.LengthList():
print("Dele failed")
return
index =1
p=self.head
while index<s:
pre =p
index+=1
p=p.next
pre.next=p.next
p=None
整體程式碼如下
#-*- coding:utf-8 -*-
#__auther__:WM
class Node(object):
#定義一個結點類
def __init__(self,data):
self.data=data
self.next=None
#建立一個連結串列類
class LinkList(object):
def __init__(self):
self.head=Node(None)
#判斷是否為空
def isEmpty(self):
p=self.head#頭指標
if p.next==None:
print("Link is Empty")
return True
return False
#列印連結串列
def printLink(self):
if self.isEmpty():
return False
p=self.head
while p:
print(p.data,end='')
p=p.next
#建立單鏈表
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 LengthList(self):
if self.isEmpty():
return 0
p=self.head
cut=0
while p:
cut+=1
p=p.next
return cut
#單鏈表的插入
def InsertList(self,s,data):
if self.isEmpty() or s<0 or s>self.LengthList():
print("Insert failed")
return
p=self.head
index=1
while index<s:
p=p.next
index+=1
node=Node(data)
node.next=p.next
p.next=node
#單鏈表的刪除操作
def DeleList(self,s):
if self.isEmpty() or s<0 or s>self.LengthList():
print("Dele failed")
return
index =1
p=self.head
while index<s:
pre =p
index+=1
p=p.next
pre.next=p.next
p=None
#單鏈表的讀取
def GetList(self,s):
if self.isEmpty()or s<0 or s>self.LengthList():
print("error!")
return
index=1
p=self.head
while index<s:
index+=1
p=p.next
print("第{}個值是{}".format(s,p.data))