在單鏈表結構上,在第1個節點插入和刪除,只不過是第i個節點的插入和刪除的特殊情況。這些情況只所以特殊,是因為head指標必須重置。可以使用乙個帶有啞頭節點迴圈鍊錶結構來簡化這些操作。迴圈鍊錶結構包含了從結構中的最後乙個節點返回到第乙個節點的鏈結。在這個實現中,至少總是有乙個節點。這個節點也就是啞頭節點(dummy header node),它不包含資料,但是充當了鍊錶結構的開頭和結尾的乙個標記。一開始的時候,在空的鍊錶結構中,head指標指向了啞頭節點,且啞頭節點的next指標指回到了啞頭節點自身,結構如下圖所示:
第乙個包含了資料的節點。位於啞頭節點之後。這個節點的next指標以迴圈的方式,指回了啞頭節點,如下圖所示:
對第i個節點的搜尋,從啞頭節點之後的節點開始。假設這個空的鍊錶的最初結構如下所示:
# coding: utf-8如下是第i個位置插入節點的**,它使用了這個鍊錶結構的新的表示:class node(object
): def __init__(self, data, next=none):
self.data =data
self.next =next
head =node(none, none)
head.next = head
# coding: utf-8這種實現的優點在於,插入和刪除操作只需要考慮一種情況,即第i個節點位於當前的第i個節點和它的前乙個節點之間的這種情況。當第i個節點是第1個節點的時候,它之前的節點就是頭節點。當i>=n,之前的節點就是最後乙個節點,並且頭節點是其下乙個節點。class node(object
): def __init__(self, data, next=none):
self.data =data
self.next =next
head =node(none, none)
head.next =head
for i in range(1,10
): head =node(i, head)
probe =head
index =5
newitem = 100
while index > 0 and probe.next !=head:
probe =probe.next
print probe.next,probe.data
index -= 1
probe.next =node(newitem, probe.next)
print probe.next.next,probe.next.data
結束!
資料結構 雙向鍊錶,迴圈鍊錶
也許是自己太小看資料結構,練習了幾天還在第二章徘徊,可自己覺得基礎還是要打牢的好 總結一下 第乙個是雙向鍊錶,include include typedef struct node node,linklist void creat linklist l else int insert linklis...
資料結構 迴圈鍊錶
近期我在學習資料結構,於是我自己整理了單鏈表 迴圈單鏈表 雙向鍊錶 雙向迴圈鍊錶的相關 以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下 時發現問題糾正於我,一起 cyclinklist.h ifndef cyclinklist h define cyclinklist h inclu...
資料結構 迴圈鍊錶
迴圈鍊錶的結點 typedef struct circularnodecircularnode 迴圈鍊錶結構 typedef struct circularlinklistcircularlinklist 在迴圈鍊錶的指定位置插入元素 void insertcircularlinklist circ...