雙向迴圈鍊錶

2021-06-27 18:50:13 字數 1020 閱讀 3146

使用哨兵(頭節點)

實現雙向迴圈鍊錶,所謂哨兵(頭結點):啞物件,簡化邊界條件處理。假設在鍊錶l中設定乙個物件l.nil ,該物件 代表nil,但也具有和其他物件相同的各個屬性。對於鍊錶**中出現的每一處對nil的引用,都替換成l.nil 。

這樣的調整將乙個常規的雙向鍊錶變成乙個有哨兵的雙向迴圈鍊錶。哨兵位於表頭和表尾之間。

l.nil.next 指向表頭, l.nil.prev 指向表尾。

#include #include #define elemtype int

typedef struct dlinklistdoublelinklist;

/* * according to the lib c

* return 0 means successful

* return -1 means failed

* * our double-link-list has a nil node !

*/int init_dlinklist(doublelinklist *list)

list->data = 0;

list->prev = list;

list->next = list;

return 0;

}doublelinklist * search_dlinklist(doublelinklist *list, elemtype target)

int del_dlinklist(doublelinklist *list, doublelinklist *target)

int insert_dlinklist(doublelinklist *list, elemtype target)

tmp->data = target;

tmp->next = list->next;

list->next->prev = tmp;

list->next = tmp;

tmp->prev = list;

return 0;

}

雙向鍊錶和雙向迴圈鍊錶

和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head next,head next的prior指向最後乙個節點即可。新節點s插入鍊錶,s next給p結點,s prior給p prior,然後,p prior n...

迴圈鍊錶,雙向鍊錶

迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...

鍊錶 雙向迴圈鍊錶

雙向迴圈鍊錶與單鏈表一樣,都是邏輯連續 物理不連續的儲存方式,但它的效果要遠遠優於單鏈表,其結構如下 雙向迴圈鍊錶首先要有乙個頭節點,頭節點中不存放資料,真正的資料從頭節點的下乙個節點開始存放 然後每乙個節點都有兩個指標,分別指向前乙個節點和後乙個節點 最後頭尾相連,就成了雙向迴圈鍊錶。includ...