鍊錶(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分為兩部...