迴圈雙向鍊錶

2021-06-16 21:46:11 字數 1113 閱讀 9882

#include typedef struct _list

list;

/* * list initialization

*/void list_init(list *list_head)

/* * return true if the list is empty

*/int is_list_empty(list *list)

/* * add element to list

* add element before head.

*/void list_insert(list *head, list *element)

/* * delete element from list

*/void list_delete(list *element)

int main(void)

以上**單步除錯,在watch視窗中對變數進行跟蹤可以看到,head指標的next指向list2,list1的next指向head,list2的next指向list1,如此行成乙個迴圈。並且注意list_insert函式是往前插入(previous)。

對於list_insert函式的實現可以這樣來看:首先你要將乙個element插入乙個鍊錶,並且插在head前面,你先要對該element的previous和next的進行操作,next肯定指向head了,而previous需要指向插入前head的previous;然後,你需要對head的prevous指標進行重新操作,既然插入它的前面,當然previous應指向element;最後,還需要改變element前乙個元素的next指標,也要讓它指向element,而得到這個指標即通過head->previous->next即可。因此總結在迴圈雙向鍊錶中插入乙個element需要改變4個指標指向(element本身兩個+head的previous+原head的previous的next)。

注:以上關於list的**來自於raw-os。

雙向鍊錶和雙向迴圈鍊錶

和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼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...