本文實例講述了Python雙向循環鏈表實現方法。分享給大家供大家參考,具體如下:
最近身邊的朋友在研究用python來實現數據結構。遇到一個問題就是雙向循環鏈表的實現,改指向的時候總是發蒙。
我自己嘗實現了一個python的雙向循環鏈表。附上代碼,希望對大家有幫助。
如果不懂什么是雙向循環鏈表的伙伴,需要補習一下數據結構的基礎之后哦~~~
在python當中 用一個類Node 來實現鏈表的節點,節點數據有三個變量:
prev:前驅指針: 用于指向當前節點前一個節點 next: 后繼指針 用于指向當前節點后一個節點 item: 值, 用于存儲該節點要存的數值當前節點的前一個節點我們叫他前驅,后一個節點我們叫他后繼。
在鏈表類當中,我們有一個變量head是鏈表的頭指針
我們拿著鏈表的頭head,就可以對他進行一些列操作:( 由于是雙向循環鏈表,修改指針特別容易出錯,我盡量說的細致,方便大家參考)
判斷空:is_empty()
如果頭指針head沒有指向則鏈表是空的 否則不是空的
在頭部添加元素: add(item)
1 新建一個節點 里面的值是item。
2 放入頭部:
2.1 如果鏈表是空的,node的next和prev都指向自己,然后head再指向node
在尾部添加元素: append(item)
1 創建一個新節點node 里面的值是item
2 放入尾部:
2.1 如果鏈表空,則執行頭部添加add就可以
2.2 鏈表非空:
2.2.1 node的next指向head
2.2.2 node的prev指向head的prev
2.2.3 head的prev元素的next指向node
2.2.4 head的prev指向改為node
2.2.5 head指向node 更換了頭部
指定位置添加元素: insert( pos , item )
1 新建一個節點node 里面的值是item
2 找到合適的位置插進去:
2.1 如果pos <= 0 還小,那就執行頭插方法 add()
2.2 如果pos >= 鏈表長度, 那就執行尾部插入 append()
2.3 如果pos位置在鏈表的中間:
2.3.1 定義一個臨時變量temp 按照傳入的pos找到要插入的位置的前一個元素
2.3.2 node的prev設為temp,node的next設為temp的next
2.3.3 temp的next指向的節點的prev改為node
2.3.4 temp的next改為node
得到鏈表長度: length()
1 我們設置一個臨時變量temp初始設為head , 設置一個計數器count 初始為 0
2 令count自增1 然后temp改指向自己的下一個元素 一直到temp遇到None 為止,temp到了鏈表的最后一個元素
通過這樣的方式,統計出一共有多少個節點返回
遍歷鏈表數據: travelji()
1 設置一個臨時變量temp初始化設為head
2 temp 每次輸出自己指向元素的值,然后在指向自己的下一個元素,一直temp為None 說明到了列表的尾部
新聞熱點
疑難解答