雙向鍊錶是除頭和尾以外,頭指標指向前一節點,尾指標指向後一節點
python實現
#定義雙向鍊錶
class listnode():
def __init__(self,data):
self.head = none
self.data = data
self.next = none
#判斷是否為空
def isempty(self):
return self.data == none
#尾部插入元素
def nodes_tail(self,data):
if isempty(self):
self.data = data
else:
node = listnode(none)
node.data = data
p = self
while p.next is not none:
p = p.next
p.next = node
node.head = p
#首部插入元素
def nodes_head(self,data):
if isempty(self):
self.data = data
return self
else:
node = listnode(none)
node.data = data
node.next = self
self.head = node
return node
#在中間插入節點
def nodes_insert(self,data,num):
if isempty(self) and num == 1:
self.data = data
else:
node = listnode(none)
node.data = data
p = self
num = num-2
while num and p.next is not none:
print(num)
p = p.next
num = num - 1
node.next = p.next
node.head = p
p.next.head = node
p.next = node
#刪除中間節點元素
def nodes_remove(self,num):
if num == 1:
return false
else:
p = self
num = num - 1
while num and p.next is not none:
p = p.next
num -= 1
if num == 0:
p.next.head = p.head
p.head.next = p.next
return true
else:
return false
if __name__ == '__main__':
nodelist = listnode(none)
for i in range(5):
nodes_tail(nodelist,i)
nodelist = nodes_head(nodelist,10)
nodes_insert(nodelist,9,2)
nodes_remove(nodelist,2)
p = nodelist
#正序輸出
while true:
print(p.data)
if p.next == none:
break
else:
p = p.next
#逆序輸出
''' while true:
print(p.data)
if p.head == none:
break
else:
p = p.head
'''
鍊錶之雙向鍊錶
首先在說下單鏈表,才能和雙鏈表作比較 單鏈表 單向鍊錶 由兩部分組成 資料域 data 和結點域 node 單鏈表就像是一條打了很多結的繩子,每乙個繩結相當於乙個結點,每個節結點間都有繩子連線,這樣原理的實現是通過node結點區的頭指標head實現的,每個結點都有乙個指標,每個節點指標的指向都是指向...
LiteOS之雙向鍊錶
liteos中的雙向鍊錶和linux中的實現相差不大。一直很難理解為什麼liteos系統中會出現類似a.h,a.inc,a.ph的標頭檔案,為了避免採用相同字尾會出現重名。採用不同字尾而檔名相同的好處是啥呢?鍊錶結構定義 節點的結構定義 typedef struct los dl list los ...
mysql 雙向鍊錶 雙向鍊錶
雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...