前兩篇部落格中介紹的鏈式儲存結構中只有乙個指示直接後繼的指標域。因此,從單鏈表中的某個結點出發,之能向後遍歷每個結點,所尋找這個結點的直接前驅只能向用頭結點出。
而若在每個結點的指標域中再加入乙個指向當前結點直接前驅的指標,就可以克服以上問題。
//雙向鍊錶,帶頭節點,頭的前驅為null,尾的後繼為null
typedef
struct dnode
dnode,
*dlist;
//初始化
void
initlist
(dlist plist)
;//頭插法
bool insert_head
(dlist plist,
int val)
;//尾插
bool insert_tail
(dlist plist,
int val)
;//查詢
dnode *
search
(dlist plist,
int key)
;//刪除
bool delete
(dlist plist,
int key)
;bool isempty
(dlist plist)
;//獲取長度,資料個數
intgetlength
(dlist plist)
;void
show
(dlist plist)
;//獲得key的前驅
dnode *
getprio
(dlist plist,
int key)
;//獲取key後繼
dnode *
getnext
(dlist plist,
int key)
;//清空資料
void
clear
(dlist plist)
;//銷毀
void
destroy
(dlist plist)
;dlist.cpp
#include
#include
#include
#include
"dlist.h"
//雙向鍊錶,帶頭節點,頭的前驅為null,尾的後繼為null
//初始化
void
initlist
(dlist plist)
plist->next =
null
; plist->prio =
null;}
//頭插法
bool insert_head
(dlist plist,
int val)
return true;
}//尾插
bool insert_tail
(dlist plist,
int val)
//查詢
dnode *
search
(dlist plist,
int key)
}return
null;}
//刪除
bool delete
(dlist plist,
int key)
//將p從鍊錶中剔除
p->prio->next = p->next;
if(p->next !=
null
)free
(p);
return true;
}bool isempty
(dlist plist)
//獲取長度,資料個數
intgetlength
(dlist plist)
return count;
}void
show
(dlist plist)
printf
("\n");
}//獲得key的前驅
dnode *
getprio
(dlist plist,
int key)
//獲取key後繼
dnode *
getnext
(dlist plist,
int key)
//清空資料
void
clear
(dlist plist)
//銷毀
void
destroy
(dlist plist)
}
鍊錶 三 雙向鍊錶
1.概念 雙向鍊錶 double linked list 的節點有兩個指標,乙個指向直接前驅,乙個指向直接後繼。2.優點 查詢直接前驅執行時間為o 1 單鏈表為o n 3.儲存結構 雙向鍊錶 typedef struct dulnodedulnode,dulinklist 4.簡單例項 includ...
鍊錶 三 雙向鍊錶
1.概念 雙向鍊錶 double linked list 的節點有兩個指標,乙個指向直接前驅,乙個指向直接後繼。2.優點 查詢直接前驅執行時間為o 1 單鏈表為o n 3.儲存結構 雙向鍊錶 typedef struct dulnodedulnode,dulinklist 4.簡單例項 includ...
鍊錶 05 雙向鍊錶
main.cpp include include doublelinkedlist.h using namespace std int main 雙向鍊錶類 class doublelinkedlist void insert doublelinkednode doublelinkednode 新節...