python3實現單向鍊錶
#######最近重學資料結構,無奈c語言已經忘得一乾二淨,所以乾脆用python來寫。
一、**結構:
- 節點類
- 單向列表類
- 鍊錶初始化操作
- __init__ 初始化鍊錶
- is_empty 判斷鍊錶是否為空
- get_len 獲取鍊錶的長度
- clear_list 清除列表
- 增加節點
- insert 在鍊錶的任意位置插入節點
- 刪除節點
- remove 刪除節點內容 為data的所有節點
- pop 刪除第i個節點並且返回節點的內容
- 檢視節點
- get_data 檢視第i個節點的內容
二、**如下:
#-*- coding:utf-8 -*-
#author: bing xu
class
node(object):
def__init__
(self,data):
self.data =data
self.next =none
class
single_linklist(object):
def__init__
(self):
'''鍊錶初始化
'''self.head_node =none
defis_empty(self):
'''判斷鍊錶是否為空
:return:
'''return self.head_node ==none
defget_len(self):
'''獲取鍊錶物件的長度
:return: 鍊錶長度
'''counter =0
cur =self.head_node
while
cur:
counter += 1cur =cur.next
return
counter
defclear_list(self):
'''清除鍊錶所有元素
:return: 空鍊錶
'''self.head_node =none
def
'''鍊錶尾部追加節點
:param data: 追加節點的內容
:return:
'''node =node(data)
ifself.is_empty():
self.head_node =node
else
: cur =self.head_node
while
cur.next:
cur =cur.next
cur.next =node
definsert(self,i,data):
'''插入新的節點
:param i: 待插入的位置,0 <= i <= self.length
:param data: 待插入的節點資料
:return:
'''node =node(data)
length =self.get_len()
cur =self.head_node
if length >=i:
if i ==0:
self.head_node =node
node.next =cur
else
:
for item in range(i-1):
cur =cur.next
temp =cur.next
cur.next =node
node.next =temp
else
:
return
false
defremove(self,data):
'''刪除鍊錶內容為data的所有節點
:param data: 要刪除的內容
:return:
'''cur =self.head_node
if cur.data ==data:
self.head_node =cur.next
return
else
:
while
cur.next:
#temp = cur
#cur = cur.next
temp,cur =cur,cur.next
if cur.data ==data:
temp.next =cur.next
defpop(self,i):
'''刪除鍊錶物件第i個節點並返回該節點內容
:param i: 要刪除的節點,0 <= i < self.length
:return: 刪除節點的內容
'''length =self.get_len()
cur =self.head_node
if i ==0:
data =cur.data
self.head_node =cur.next
return
data
elif i for j in
range(i):
temp, cur =cur, cur.next
data =cur.data
temp.next =cur.next
return
data
defreset_data(self,i,data):
'''修改第i個節點的內容
:param i: 要修改的節點,0 <= i < self.length
:param data: 修改後的內容
:return:
'''cur =self.head_node
if 0 <= i for j in
range(i):
cur =cur.next
cur.data =data
else
:
return
false
defget_data(self,i):
'''獲取鍊錶第i個的值
:param i: 0 <= i < self.length
:return: 節點的內容
'''cur =self.head_node
if 0 <= i for j in
range(i):
cur =cur.next
return
cur.data
else
:
return false
三、**測試:
鍊錶初始化:
sin_list =single_linklist()(sin_list.get_len())
(type(sin_list))
結果為:
0'__main__.single_linklist
'>
增:
for i in range(10):sin_list.insert(0,
'insert')
(sin_list.get_len())
for j in
range(sin_list.get_len()): #遍歷列印
print(sin_list.get_data(j),end=','
)結果:
11insert,0,1,2,3,4,5,6,7,8,9,
刪:
for i in range(10):sin_list.remove(0)
sin_list.pop(sin_list.get_len()-1)
for j in
range(sin_list.get_len()): #遍歷列印
print(sin_list.get_data(j),end=','
)結果:
1,2,3,4,5,6,7,8,
改:
for i in range(10):sin_list.reset_data(0,'修改
')sin_list.reset_data(9,'完成'
)for j in
range(sin_list.get_len()): #遍歷列印
print(sin_list.get_data(j),end=','
)結果:
修改,1,2,3,4,5,6,7,8,完成,
python3實現鍊錶
a 鍊錶的結構為 b 鍊錶的實現方法 鍊錶結構實現 私有屬性 pro item是指向下個節點的指標,item為此節點的值 class chaindemo def init self,item none,pos item none self.item item self.pos item pos it...
Python 實現單向鍊錶
鍊錶顧名思義就是 鏈 鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元存放資料元素。鍊錶中每乙個元素成為 結點 每乙個結點都是由資料域和指標域組成的。跟陣列不同鍊錶不用預先定義大小,而且硬體支援的話可以無限擴充套件。陣列需要預先定義大小,無法適應資料動態地增減,資料小於定義的長度會浪費記憶體,...
Python 實現單向動態鍊錶
鍊錶顧名思義就是 鏈 鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元存放資料元素。鍊錶中每乙個元素成為 結點 每乙個結點都是由資料域和指標域組成的。跟陣列不同鍊錶不用預先定義大小,而且硬體支援的話可以無限擴充套件。陣列需要預先定義大小,無法適應資料動態地增減,資料小於定義的長度會浪費記憶體,...