資料結構 帶頭結點雙向迴圈鍊錶相關操作

2021-08-25 02:33:34 字數 3441 閱讀 1290

鍊錶結構如下:

相關操作結構

因為帶頭結點,所以在任何結點的操作都是一致的,相對單鏈表來說簡單一些。

#ifndef __linklist_h__

#define __linklist_h__

#include

#include

#include

//帶頭結點迴圈雙鏈表

typedef int datatype;

typedef struct dlinklist

pdlinklist,*dlinklist; //節點資訊

/*typedef struct dlinklist

dlinklist; */

//鍊錶資訊

void dlinklistinit(dlinklist* phead);

void dlinklistdestory(dlinklist* phead);

void dlinklistpushback(dlinklist* phead,datatype x);

void dlinklistpushfront(dlinklist* phead,datatype x);

void dlinklistpopback(dlinklist* phead);

void dlinklistpopfront(dlinklist* phead);

dlinklist dlinklistfind(dlinklist* phead, datatype x);

void dlinklistinsert(dlinklist* phead, dlinklist pos, datatype x);

void dlinklisterase(dlinklist* phead, dlinklist pos);

void dlinklistremove(dlinklist* phead, datatype x);

void dlinklistremoveall(dlinklist* phead, datatype x);

int dlinklistsize(dlinklist* phead);

int dlinklistempty(dlinklist* phead);

void printdlinklist(dlinklist phead);

void testdlinklist();

#endif//__linklist_h__

#include "dlinklist.h"

////

////

//帶頭結點迴圈雙鏈表//

////

////

///void dlinklistinit(dlinklist* phead)

void dlinklistdestory(dlinklist* phead)

free(*phead);

(*phead) = null;

printf("銷毀成功\n");

}void dlinklistpushback(dlinklist* phead, datatype x)

void dlinklistpushfront(dlinklist* phead, datatype x)

void

dlinklistpopback

(dlinklist* phead)

void

dlinklistpopfront

(dlinklist* phead)

dlinklist

buynode

(datatype x)

dlinklist dlinklistfind(dlinklist* phead, datatype x)

pcur = pcur->pnext;

}return null;

}void dlinklistinsert(dlinklist* phead, dlinklist pos, datatype x)

void dlinklisterase(dlinklist* phead, dlinklist pos)

else

}void dlinklistremove(dlinklist* phead, datatype x)

else

}}void dlinklistremoveall(dlinklist* phead, datatype x)

else

}}int dlinklistsize(dlinklist* phead)

return len;

}int dlinklistempty(dlinklist* phead)

void printdlinklist(dlinklist phead)

printf("\n");

}void testdlinklist()

else

printf

("為空: %d\n", dlinklistempty(&dl));

dlinklistinsert

(&dl, dlinklistfind(&dl, 4), 0);

printdlinklist

(dl);

printf

("大小%d\n", dlinklistsize(&dl));

if(dlinklistfind(&dl, 7) != null)

else

printf

("為空: %d\n", dlinklistempty(&dl));

dlinklisterase

(&dl, dlinklistfind(&dl, 8));

printdlinklist

(dl);

printf

("大小 %d\n", dlinklistsize(&dl));

if(dlinklistfind(&dl, 8) != null)

else

printf

("為空: %d\n", dlinklistempty(&dl));

dlinklistremove

(&dl, 5);

printdlinklist

(dl);

dlinklistremoveall

(&dl, 5);

printdlinklist

(dl);

dlinklistdestory

(&dl);

}

結語
我希望你,眼裡充滿希望,手裡握著陽光!

資料結構 雙向迴圈帶頭結點鍊錶

前面我們寫過了不帶頭結點的單鏈表,由於沒有頭結點,在對單鏈表進行頭插 刪的時候需要傳入二級指標 在需要進行尾插 刪的時候,需要先根據頭指標找到頭結點,然後從頭往後遍歷找到最後乙個結點再進行相應操作。而我們今天要寫的雙向迴圈帶頭結點鍊錶,相對於不帶頭結點的單鏈表做增刪時,將會方便許多。typedef ...

資料結構C 描述 帶頭結點的雙向迴圈鍊錶

執行展示 鍊錶是線性表的一種實現形式,它的核心是指標,主要特點是增加與刪除不需要移動大量元素,查詢某一特定元素較慢,邏輯上相鄰的元素物理上不一定相鄰。鍊錶主要分為單鏈表,雙向鍊錶與迴圈鍊錶。每種鍊錶又可分為帶頭結點的和不帶頭結點的。本篇主要介紹帶頭結點的雙向迴圈鍊錶的基本操作。雙向迴圈鍊錶的每個結點...

資料結構 帶頭結點的雙向迴圈鍊錶操作 C實現

定義結點結構 typedef struct dcnode dcnode,dclinklist 鍊錶初始化 void initdclinklist dclinklist plist plist prior plist next plist 為了實現以下插入,刪除等一系列操作,先封裝以下功能 int g...