1.單鏈表結點中只有乙個指標指向其後繼的指標域,所以單鏈表只能從頭結點依次順序的向後遍歷。而雙向鍊錶結點中有兩個指標,分別指向其前驅結點和後繼結點,這樣就可以實現鍊錶的雙向遍歷了。
2.雙向鍊錶的具體實現過程
#include
#include
#define elemtype int
typedef
struct linknodelinknode;
linknode *phead =
null
;//雙向鍊錶的頭指標
linknode *pend =
null
;//雙向鍊錶的尾指標
//建立雙向鍊錶節點
void
createnode
(linknode *pnode)
pnode->pnext =
null
; pnode->pprior =
null;}
//建立雙向鍊錶(帶頭節點),可以理解為建立乙個空表,建立的鍊錶中只包含乙個頭結點
void
createlinklist()
//新增結點,結點後面依次按順序新增,注意與後面的插入結點區分開
void
addnode()
//輸出雙向鍊錶
void
showlinklist()
}else
}//雙向鍊錶中查詢某個結點
linknode*
findnode
(elemtype e)
//e為查詢條件
ptemp=ptemp->pprior;}}
return
null;}
//修改雙向鍊錶某一結點的值
void
modifynode
(elemtype e)
else}}
//雙向鍊錶特定位置插入結點
void
insertnode
(elemtype e,
int ntype)
//e為插入點對應的值,ntype表示插入的方式,我們規定ntype=0為前插,ntype=1為後插
else
//後插
else
}printf
("插入結點成功!\n");
}}//刪除雙向鍊錶某一結點
void
deletenode
(elemtype e)
else
//刪除其他位置結點
free
(ppos)
;//釋放記憶體空間
printf
("刪除結點成功!\n");
}}//刪除整個雙向鍊錶
void
clearlinklist()
phead->pnext =
null
; phead->pprior =
null
; pend = phead;
printf
("清空鍊錶成功!\n");
}}intmain()
case2:
case3:
case4:
case5:
case6:
case7:
case8:
default
:printf
("error");
}}return0;
}
雙向鍊錶C語言實現
ifndef stdlist h define stdlist h typedef struct tagstdnode stdnode,lpstdnode typedef struct tagstdlist stdlist,lpstdlist 鍊錶資料結構 struct tagstdnode 鍊錶節...
c語言實現雙向鍊錶
單向鍊錶有一定的缺陷,其中乙個就是只能一條路走到黑,只能前進不能後退,但雙向鍊錶就解決了這一問題 include include typedef struct node node,linklist void create list tail linklist l 頭插法建立 void create ...
C語言實現雙向鍊錶
1.定義兩個結構體,乙個表示鍊錶的乙個單元,另乙個表示鍊錶的頭結點 2.鍊錶的初始化 必須讓頭結點的next和prev指向自己 清除 不刪除頭結點 銷毀 刪除頭結點 3.增操作 每次增加需要開闢乙個單元,所以直接建立乙個函式用來建立單元 頭插 尾插 pos結點之前插 4.刪操作 分為三種 刪除pos...