Python重現資料結構 鍊錶的實現(雙鏈表)

2021-10-10 01:33:45 字數 3591 閱讀 7952

雙向鍊錶(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來實現乙個最基本的單鏈表呢?...