雙向鍊錶(double_linked_list)也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。
#file name :double linked_list
#author:龍文漢
#version:1.0
#date:2020.10.5
#description:建立雙鏈表
class
node()
:def
__init__
(self,data)
: self.data = data
self.prev =
none
self.
next
=none
class
dlinked_list()
:def
__init__
(self)
: self.head = node(
none
) self.length =
0def
is_empty
(self)
:return self.length ==
0def
get_length
(self)
:return self.length
defprint
(self)
: temple = self.head.
next
while temple:
print
(temple.data)
temple = temple.
next
defadd
(self,position,new_element)
:if position <
1or position > self.length+1:
raise indexerror(
"index out of the length!"
) temple = self.head
for i in
range(1
,self.length+1)
:if i == position:
new_element.
next
= temple.
next
nnext_temple = new_element.
next
nnext_temple.prev = new_element
new_element.prev = temple
temple.
next
= new_element
self.length +=
1return
else
: temple = temple.
next
def(self,new_element)
: temple = self.head
while temple.
next
: temple = temple.
next
temple.
next
= new_element
new_element.prev = temple
self.length +=
1def
delete
(self,node)
: temple = self.head.
next
for i in
range(1
,self.length+1)
:if temple.data == node.data:
if i!= self.length:
temple.prev.
next
= temple.
next
temple.
next
.prev = temple.prev
temple.
next
=none
temple.prev =
none
else
: temple.prev.
next
= temple.
next
self.length -=
1return
else
: temple = temple.
next
defsearch_node
(self,node)
: temple = self.head
for i in
range(1
,self.length+1)
:if temple.data == node.data:
print
("the index of node is"
,i-1
)else
: temple = temple.
next
defchange_node
(self,position,node)
:if position <
1or position > self.length:
raise indexerror(
"index eorre!"
) temple = self.head
for i in
range(0
,self.length+1)
:if position == i:
temple.data = node.data
else
: temple = temple.
next
if __name__ ==
"__main__"
: dlinke_a = dlinked_list(
)print
(dlinke_a.is_empty())
print
(dlinke_a.get_length())
23)) dlinke_a.print(
) dlinke_a.add(
1,node(34)
) dlinke_a.print(
)print
(dlinke_a.get_length())
dlinke_a.add(
2, node(
100)
) dlinke_a.print(
)print(""
) dlinke_a.search_node(node(
100)
) dlinke_a.print(
)print(""
) dlinke_a.delete(node(23)
) dlinke_a.print(
)
python資料結構 鍊錶
資料結構是電腦科學必須掌握的一門學問,很多的教材都是用c語言實現鍊錶,因為c有指標,可以很方便的控制記憶體,很方便就實現鍊錶,其他的語言,則沒那麼方便,有很多都是用模擬鍊錶,因為python是動態語言,可以直接把物件賦值給新的變數。在c c 中,通常採用 指標 結構體 來實現鍊錶 而在python中...
python資料結構之鍊錶
鍊錶 linked list 由於python是動態語言,可以直接把物件賦值給新的變數,於是在python一切皆為物件的原理上實現鍊錶的各項操作。在實現鍊錶python類的屬性和方法操作之前,先整理一些鍊錶的理論知識。一 鍊錶的基本結構鍊錶是通過乙個個節點 node 組成的,每個節點都包含了稱為資料...
資料結構 鍊錶(Python實現)
鍊錶這個資料結構在我們做題時非常常見,鍊錶上的每乙個元素都包含了兩個值,乙個值是自身的值,另外乙個值則是指向下乙個元素的位址,這樣一整個鍊錶才能夠串連起來。如下所示 其中第乙個為單鏈表,每乙個元素都指向了下乙個元素,最後乙個元素指向了none。那麼我們如何使用python來實現乙個最基本的單鏈表呢?...