python3實現單向鍊錶

2022-09-20 04:54:09 字數 4421 閱讀 2104

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()

print

(sin_list.get_len())

print

(type(sin_list))

結果為:

0'__main__.single_linklist

'>

增:

for i in range(10):

sin_list.insert(0,

'insert')

print

(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 實現單向動態鍊錶

鍊錶顧名思義就是 鏈 鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元存放資料元素。鍊錶中每乙個元素成為 結點 每乙個結點都是由資料域和指標域組成的。跟陣列不同鍊錶不用預先定義大小,而且硬體支援的話可以無限擴充套件。陣列需要預先定義大小,無法適應資料動態地增減,資料小於定義的長度會浪費記憶體,...