優點:單向鍊錶增加刪除節點簡單。遍歷時候不會死迴圈;
缺點:只能從頭到尾遍歷。只能找到後繼,無法找到前驅,也就是只能前進。
適用於節點的增加刪除。
雙向鍊錶:有兩個指標,乙個指向前乙個節點,乙個後乙個節點。
優點:可以找到前驅和後繼,可進可退;
缺點:增加刪除節點複雜,需要多分配乙個指標儲存空間。
適用於需要雙向查詢節點值的情況
下面講解雙向迴圈鍊錶的一般寫法:
#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...