首先,我們來看一下帶頭雙向迴圈鍊錶的結構:
目錄
帶頭雙向迴圈鍊錶結點的定義:
相關操作介面:
1、初始化 && 獲取乙個結點
2、銷毀鍊錶
3、尾插
4、頭插
5、指定元素查詢
6、任意位置插入
7、 尾刪
8、頭刪
9、任意位置刪除
10、列印鍊錶
附上完整**:
typedef int datatype;
typedef struct node
node, *pnode, *plist;
邏輯:因為實現的是帶頭結點的雙向迴圈鍊錶,所以初始化的時候,我們得到乙個空的結點,它的 next 和 prev 都指向它自己。獲取結點就是靠動態開闢空間。
pnode buynode(datatype d)
ptr->data = d;
ptr->next = null;
ptr->prev = null;
return ptr;
}plist initlist()
邏輯:遍歷逐個銷毀。
void destorylist(plist plist)
}
邏輯:記錄好最後乙個結點和頭結點。
void pushback(plist plist, datatype d)
邏輯:記錄好第乙個結點和頭結點。
void pushfront(plist plist, datatype d)
邏輯:遍歷比較是否有指定元素,注意不要造成死迴圈。
pnode findlist(plist plist, datatype d)
cur = cur->next;
} return null;
}
邏輯:記錄好指定位置的前乙個結點和後乙個結點。
void insertlist(pnode pos, datatype d)
邏輯:記錄好頭結點和倒數第二個結點。注意鍊錶是否只有頭結點,如果只有頭結點,不可以刪除。
void popback(plist plist)
邏輯:記錄好頭結點和第二個結點。注意鍊錶是否只有頭結點,如果只有頭結點,不可以刪除。
void popfront(plist plist)
邏輯:記錄好指定位置的前乙個結點和後乙個結點。注意鍊錶是否只有頭結點,如果只有頭結點,不可以刪除。
void eraselist(pnode pos)
邏輯:遍歷列印。
void printlist(plist plist)
printf("head\n");
}
總結:所有介面的實現,畫圖可以更好的讓我們了解介面實現的邏輯,並且雙向迴圈鍊錶介面的實現都是很簡單的,無論是插入刪除,效率都是比較高的。
dlist.h
#ifndef __dlist_h__
#define __dlist_h__
#include #include #include typedef int datatype;
typedef struct node
node, *pnode, *plist;
plist initlist();
void destorylist(plist plist);
pnode buynode(datatype d);
void pushback(plist plist, datatype d);
void pushfront(plist plist, datatype d);
pnode findlist(plist plist, datatype d);
void insertlist(pnode pos, datatype d);
void popback(plist plist);
void popfront(plist plist);
void eraselist(pnode pos);
void printlist(plist plist);
#endif //__dlist_h__
dlist.c
#include "dlist.h"
pnode buynode(datatype d)
ptr->data = d;
ptr->next = null;
ptr->prev = null;
return ptr;
}plist initlist()
void destorylist(plist plist)
}void pushback(plist plist, datatype d)
void pushfront(plist plist, datatype d)
pnode findlist(plist plist, datatype d)
cur = cur->next;
} return null;
}void insertlist(pnode pos, datatype d)
void popback(plist plist)
void popfront(plist plist)
void eraselist(pnode pos)
void printlist(plist plist)
printf("head\n");
}
test.c
#include "dlist.h"
void pushbacktest()
void pushfronttest()
void findlisttest()
else
destorylist(plist);
}void insertlisttest()
else
destorylist(plist);
}void popbacktest()
void popfronttest()
void eraselisttest()
else
destorylist(plist);
}int main()
帶頭雙向迴圈鍊錶
帶頭雙向迴圈鍊錶的增刪查改實現 帶頭 雙向 迴圈鍊錶增刪查改實現 typedef int ltdatatype typedef struct listnode listnode 建立乙個新節點 listnode buylistnode ltdatatype x 建立返回鍊錶的頭節點 listnode...
雙向迴圈帶頭節點鍊錶
include include struct dblnode typedef struct dblnode dblnode typedef struct dblnode dbllink void create link dbllink head 建立鍊錶 void create newnode db...
帶頭雙向迴圈鍊錶增刪操作
標頭檔案list.h存放函式宣告 ifndef list h define list h include include include typedef int ltdatatype typedef struct listnodelistnode typedef struct listlist 初始...