python 實現雙鏈表

2022-06-19 15:39:14 字數 4102 閱讀 2751

雙鏈表和單鏈表進行比較的優點與不同

節點多了乙個前驅指標域

在很多基本操作上,多了一種選擇,因為雙鏈表可以向前進行移動尋位

如果給每個節點新增乙個對應的下標,那麼在尋找節點時,我們可以使用二分發來進行節點的定址工作,這相對於單鏈表是乙個效能的優化

7  """

8 python實現雙鏈表

9 """

10 class

node(object):

11 def

__init__

(self,elem):

12 self.elem =elem

13 self.next =none

14 self.front =none

15 class

linklist(object):

16 def

__init__(self,node = none):#

鍊錶的初始化

17 self.__head =node

18 self.curlen =0

19 def

empty(self):

20 if self.head ==none:

21 raise exception("

鍊錶為空")

22 def

len(self):

23 return

self.curlen

24 def

add_head(self,item):

25 node =node(item)

26 node.next = self.__head

27 self.__head =node

28 self.curlen += 1

29 def

add_tail(self,item):

30 node =node(item)

31 tempnode = self.__head

32 while tempnode !=none:

33 tempnode =tempnode.next

34 tempnode.next =node

35 self.curlen += 1

36 def

insert(self,location,item):

37 node =node(item)

38 if location < 0 or location > self.curlen - 1:

39 raise exception("

插入位置非法")

40 elif location ==0:

41self.add_head(item)

42 elif location ==self.curlen:

43 tempnode = self.__head

44 while tempnode.next !=none:

45 tempnode =tempnode.next

46 tempnode.next =node

47 self.curlen += 1

48 else

:

49 tempnode = self.__head

50 for i in range(location - 1):

51 tempnode =tempnode.next

52 node.next =tempnode.next

53 tempnode.next =node

54 self.curlen += 1

55 def

delitem(self,item):

56 if self.__head.elem ==item:

57 self.__head = self.__head

.next

58 else

:

59 tempnode = self.__head

60

61 while tempnode!=none:

62 if tempnode.next.elem ==item:

63 break

64 tempnode =tempnode.next

65 tempnode.next =tempnode.next.next

66 def

change(self,item,changed_item):

67 tempnode = self.__head

68 while tempnode !=none:

69 if tempnode.elem ==item:

70 tempnode.elem =changed_item

71 break

72 def

search(self,item):

73 tempnode = self.__head

74 while tempnode !=none:

75 if tempnode.elem ==item:

76 return

true

77 tempnode =tempnode.next

78 return

false

79 def

display(self):

80 tempnode = self.__head

81 while tempnode !=none:

82 print(tempnode.elem,end = "")

83 tempnode =tempnode.next

84 print

()

85 if

__name__ == "

__main__":

86 linklist1 =linklist()

87 linklist1.add_head(1)

88 linklist1.add_head(2)

89 linklist1.insert(0,3)

90linklist1.display()

91 print

(linklist1.curlen)

92 linklist1.delitem(2)

93linklist1.display()

94 linklist1.change(3,4)

95 print(linklist1.search(4))

96 linklist1.display()

此**並沒有充分的利用雙鏈表的優點來進行操作,有興趣的同學可以在此基礎上來進行修改

python實現雙鏈表

listvalue 1,5,6,2,7,3 listright 3,2,4,5,1,1 listleft 1,5,1,0,2,3 正向遍歷 head listleft.index 1 print listvalue head next listright head while next 1 prin...

雙鏈表實現

一 實驗目的 鞏固線性表的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。二 實驗內容 建立乙個由n個學生成績的順序表,n的大小由自己確定,每乙個學生的成績資訊由自己確定,實現資料的對錶進行插入 刪除 查詢等操作。分別輸出結果。三 源 includeconst i...

雙鏈表實現

以前寫的不帶頭的單鏈表實現,當時也啥也沒學,好多東西不知道,加上一心想壓縮 減少情況,所以寫得不太好。請教了老師,首先是命名問題和 緊湊性等的改進。還有可讀性方面的改進,多寫了一些注釋。並且因為帶頭的比較好寫,好操作,所以標準寫法也不是很長,繁瑣。下面貼 include include includ...