鍊錶結構如下:
相關操作結構
因為帶頭結點,所以在任何結點的操作都是一致的,相對單鏈表來說簡單一些。
#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...