實現帶頭結點的雙向迴圈鍊錶

2021-10-23 03:47:32 字數 2472 閱讀 2635

dlist.h

//帶頭節點的雙向迴圈鍊錶

//為什麼要帶頭

//原因是因為如果不帶頭的話,那麼頭插或者頭刪會比較麻煩

//而且不帶頭的話需要傳遞二級指標,帶頭的話,只需要傳遞一級指標

//為什麼給成雙向的?

//(有乙個理由是可以逆向列印鍊錶)

//也就是對有些操作會簡單一些

#pragma once

// 保證標頭檔案不會被重複包含

#include

#include

#include

typedef

int dldatatype;

//鍊錶的結點結構

typedef

struct dlistnode

dlnode;

//初始化

void

dlistinit

(dlnode*

* phead)

;//尾插

void

dlistpushback

(dlnode* phead, dldatatype data)

;//尾刪

void

dlistpopback

(dlnode* phead)

;//頭插

void

dlistpushfront

(dlnode* phead, dldatatype data)

;//頭刪

void

dlistpopfront

(dlnode* phead)

;//銷毀

void

dlistdestroy

(dlnode*

* phead)

;//建立新的結點

dlnode*

buydlnode

(dldatatype data)

;//列印函式

void

printlist

(dlnode* phead)

;//查詢

dlnode*

dlistfind

(dlnode* phead, dldatatype data)

;//任意位置的插入

void

dlistinsert

(dlnode* pos, dldatatype data)

;//任意位置的刪除

void

dlisterase

(dlnode* pos)

;//將鍊錶中有效節點全部清空

void

dlistclear

(dlnode* pos)

;

dlist.c
#include

"dlist.h"

dlnode*

buydlnode

(dldatatype data)

pnewnode->_pnext =

null

; pnewnode->_ppre =

null

; pnewnode->data = data;

return pnewnode;

}void

dlistinit

(dlnode*

* phead)

void

dlistpushback

(dlnode* phead, dldatatype data)

void

printlist

(dlnode* phead)

printf

("\n");

}void

dlistpopback

(dlnode* phead)

void

dlistpushfront

(dlnode* phead, dldatatype data)

void

dlistpopfront

(dlnode* phead)

dlnode*

dlistfind

(dlnode* phead, dldatatype data)

return

null;}

void

dlistinsert

(dlnode* pos, dldatatype data)

void

dlisterase

(dlnode* pos)

void

dlistdestroy

(dlnode*

* phead)

void

dlistclear

(dlnode* phead)

phead->_pnext = phead;

phead->_ppre = phead;

}

main.c
#include

"dlist.h"

intmain()

不帶頭結點的雙向迴圈鍊錶

基本概念 迴圈鍊錶 將單鏈表中最後乙個結點的next指向頭結點或者空指標,就使得整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶。雙向鍊錶 是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域prior,在雙向鍊錶的結點中有兩個指標域,乙個next指向直接後繼,乙個prio...

鍊錶 帶頭結點的雙向迴圈鍊錶

還需改進 creat node這個函式應有返回型別,來判斷新建結點是否成功,不然主函式中不管成不成功都會訪問該節點成員。改了這個函式,在主函式中create node後要判斷是否成功,不成功就提示並退出函式,退出前別忘了還要釋放鍊錶!同時create link這個函式中也要判斷head是否申請成功,...

C 實現雙向迴圈鍊錶(帶頭結點)

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。簡單的畫乙個雙向迴圈簡易圖 下面就用c 實現一下基本操作 當然也有 c 語言 版的,只是單鏈表操作...