python 鍊錶定義以及實現

2021-07-27 13:58:06 字數 2131 閱讀 2156

鍊錶(linked list)是一組資料項的集合,其中每個資料項都是乙個節點的一部分,每個節點還包含指向下乙個節點的鏈結.

鍊錶的資料結構如下圖所示

在鍊錶中刪除操作可以通過修改指標來實現,如下圖所示:

插入則是調整,插入點的前後兩個指標的指向關係,如下圖所示:

但是和c不一樣,python沒有專門的指標概念,在python中每個變數都是指標,例如:

用內建資料結構(list, dict, tuple等)的巢狀/組合,它們隱式地包含了指向/巢狀關係,如graph[u][v]=

類的成員變數、巢狀類可能包含了指向/巢狀關係;

引用表示指向關係,只不過引用不能像指標一樣運算,比如 p + 1 指向下乙個元素,所以可能限制頗多

因此,要實現鍊錶的操作,不能和c一樣直接對指標進行操作.

鍊錶實現

實現鍊錶總體需要兩部

1.定義鍊錶:

# definition for singly-linked list.

class listnode(object):

def __init__(self):

self.val = none

self.next = none

2.對鍊錶進行操作

class listnode_handle:

def __init__(self):

self.cur_node = none

def add(self, data):

#add a new node pointed to previous node

node = listnode()

node.val = data

node.next = self.cur_node

self.cur_node = node

return node

def print_listnode(self, node):

while node:

print '\nnode: ', node, ' value: ', node.val, ' next: ', node.next

node = node.next

def _reverse(self, nodelist):

list =

while nodelist:

nodelist = nodelist.next

result = listnode()

result_handle = listnode_handle()

for i in list:

result = result_handle.add(i)

return result

其中對鍊錶進行操作部分,大致是包括新增新的node, 反向排列鍊錶, 列印鍊錶.

新增鍊錶節點時候操作如下:

假設有要完成鍊錶操作為:

listnode_1
鍊錶是:

l1 = listnode()
且需要吧1,8,3按

1 -->8 -->3的順序放入鍊錶中,需要進行的操作則

listnode_1 = listnode_handle()

l1 = listnode()

l1_list = [1,8,3]

for i in l1_list:

l1 = listnode_1.add(i)

結果是:

1 -->8 -->3

呼叫反向排列鍊錶方式如下:

l1 = listnode_1._reverse(l1)
列印鍊錶的操作如下:

listnode_1.print_listnode(l1)
github:

參考:

知乎

迴圈鍊錶的定義以及常見操作

從第乙個結點開始 for i 1 currnode i pos 1 i 開始遍歷節點,找到當前節點 if currnode 當前節點非空 void printcircularlinklist circularlinklist clist circularnode node clist next 頭指...

Python 實現單向鍊錶

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

Python 鍊錶的實現

鍊錶由一系列不必在記憶體中相連的結構構成,這些物件按線性順序排序。每個結構含有表元素和指向後繼元素的指標。最後乙個單元的指標指向null。為了方便鍊錶的刪除與插入操作,可以為鍊錶新增乙個表頭。刪除操作可以通過修改乙個指標來實現。插入操作需要執行兩次指標調整。1.1 node實現 每個node分為兩部...