雙向迴圈鍊錶
每乙個結點都有兩個指標,乙個前驅乙個後繼,頭結點的前驅指向最後乙個結點,最後乙個結點的後繼指向頭結點
結構體定義
typedef
int type;
//結點定義
typedef
struct nodenode;
//鍊錶定義
typedef
struct listlist;
建立乙個結點
node*
creatnode
(type data)
初始化乙個雙向迴圈鍊錶
void
listinit
(list* lst)
列印
void
printlist
(list* lst)
printf
("\n");
}
尾插
void
listpushback
(list* lst, type data)
尾刪
void
listpopback
(list* lst)
last = lst->_header->_prev;
prev = last->_prev;
// prev _header
prev->_next = lst->_header;
lst->_header->_prev = prev;
free
(last)
;}
頭插
void
listpushfront
(list* lst, type data)
頭刪
void
listpopfront
(list* lst)
front = lst->_header->_next;
next = front->_next;
free
(front)
; lst->_header->_next = next;
next->_prev = lst->_header;
}
任意pos位置之前插入
void
listinsert
(node* pos, type data)
刪除pos位置的結點
void
listerase
(node* pos)
prev = pos->_prev;
next = pos->_next;
free
(pos)
; prev->_next = next;
next->_prev = prev;
}
銷毀鍊錶
void
listdesroy
(list* lst)
free
(lst->_header)
; lst->_header =
null
;}
雙向鍊錶及其各種操作
什麼是雙向鍊錶 我們都知道單向鍊錶中的每乙個節點有且只有乙個指標,這個指標就是用來指向下乙個節點的,單向鍊錶顧名思義就是鍊錶方向是單方向的,而本文要介紹的雙向鍊錶就是鍊錶方向是雙方向的,也就是雙向鍊錶中的每乙個節點有兩個指標,乙個指標用來指向上乙個節點 前驅 另乙個指標用指向下乙個節點 後繼 雙向鍊...
c 鍊錶及其相關操作
僅供自己學習參考 鍊錶,線性表的鏈式儲存結構。前提 typedef struct lnode lnode,linklist 單鏈表的建立及其相關操作 void creatlist linklist l,int n 頭插法 建立鍊錶6 5 4 3 2 1,有頭結點 void creatlist2 li...
雙向鍊錶及其用法
一 雙向鍊錶的定義 雙向鍊錶也是鍊錶的一種,它每個資料結點中都有兩個結點,分別指向其直接前驅和直接後繼。所以我們從雙向鍊錶的任意乙個結點開始都可以很方便的訪問其前驅元素和後繼元素。二 雙向鍊錶的儲存結構 雙向鍊錶也是採用的鏈式儲存結構,它與單鏈表的區別就是每個資料結點中多了乙個指向前驅元素的指標域 ...