雙向迴圈鍊錶

2021-10-24 18:03:30 字數 2867 閱讀 8721

優點:單向鍊錶增加刪除節點簡單。遍歷時候不會死迴圈;

缺點:只能從頭到尾遍歷。只能找到後繼,無法找到前驅,也就是只能前進。

適用於節點的增加刪除。

雙向鍊錶:有兩個指標,乙個指向前乙個節點,乙個後乙個節點。

優點:可以找到前驅和後繼,可進可退;

缺點:增加刪除節點複雜,需要多分配乙個指標儲存空間。

適用於需要雙向查詢節點值的情況

下面講解雙向迴圈鍊錶的一般寫法:

#include

#include

#include

#include

#define ok 1

#define error 0

#define ture 1

#define false 0

typedef

unsigned

char bool;

typedef

struct listlist;

list *

creatlist

(void

) head->prev = head;

head->next = head;

return head;

}list *

creatnodeforlist

(int n)

node->next =

null

; node->prev =

null

; node->data = n;

return node;

}/**通過表頭插入***********/

static bool insetnodetolistbyhead

(list *head,

int n)

list *node =

creatnodeforlist

(n);

node->prev = head;

node->next = head->next;

head->prev->next = node;

head->next = node;

return ok;

}/**通過表尾部插入*********/

static bool insetnodetolistbytail

(list *head,

int n)

list *node =

creatnodeforlist

(n);

list *last = head;

while

(last->next != head)

head->prev = node;

node->next = head;

last->next = node;

node->prev = last;

return ok;

}/**指定位置刪除結點********/

static bool specifylocationtodelete

(list *head,

int dele)

} dlnodep->next = dlnode->next;

dlnode->next->prev = dlnodep;

free

(dlnode)

; dlnode =

null

;printf

("\r\n刪除成功\r\n");

return ok;

}/**搜尋指定元素*********/

static bool searchspecifyelement

(list *head,

int seek)

}printf

("\r\n存在該元素,是第%d個結點\r\n"

,record)

;return ok;

}/**修改指定的元素********/

static bool modifyspecifyelement

(list *head,

int mod,

int elmt)

} monode->data = elmt;

printf

("\r\n存在該元素,是第%d個結點,可以修改\r\n"

,record)

;return ok;

}/**列印鍊錶中的元素******/

static bool printflist

(list *head)

printf

("\n");

return ok;

}static

intaddnumbertolink

(void

)/**選單***************/

static

void

menu

(void

)int

main

(int argc,

char

**ar**)

menu()

;int choose =1;

while

(choose)

break

;case2:

break

;case3:

break

;case4:

break

;case5:

break

;case6:

break

;default

:break

;printf

("\n");

menu()

;}printf

("\n");

menu()

;}return ok;

}

雙向鍊錶和雙向迴圈鍊錶

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