雙鏈表和單鏈表進行比較的優點與不同
節點多了乙個前驅指標域
在很多基本操作上,多了一種選擇,因為雙鏈表可以向前進行移動尋位
如果給每個節點新增乙個對應的下標,那麼在尋找節點時,我們可以使用二分發來進行節點的定址工作,這相對於單鏈表是乙個效能的優化
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...