Java數據結構與算法學習之雙向鏈表
更新時間:2021年12月28日 09:56:26 作者:玄澈_
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。本文將為大家詳細介紹雙向鏈表的特點與使用,需要的可以參考一下

雙向鏈表的儲存結構示意圖

雙向鏈表的初始化結構
1.雙向鏈表的結點

代碼實現(xiàn)
//雙向鏈表的結點,包含一個數據域,兩個指針域
typedef struct DoublyNode {
ElementType date; //數據域
struct DoublyNode* prev; //指向前綴結點
struct DoublyNode* next; //指向后綴結點
}DoublyNode;
2.雙向鏈表的頭結點

//雙向鏈表
typedef struct DoublyLinkList {
int length;
DoublyNode* next;
};
3.總代碼
//雙向鏈表的結點,包含一個數據域,兩個指針域
typedef struct DoublyNode {
ElementType date; //數據域
struct DoublyNode* prev; //指向前綴結點
struct DoublyNode* next; //指向后綴結點
}DoublyNode;
//雙向鏈表
typedef struct DoublyLinkList {
int length;
DoublyNode* next;
};
雙向鏈表中的指定文件插入元素?
1.插入的為第一個位置


代碼實現(xiàn)

2.其他位置插入

代碼實現(xiàn)

總代碼
void InsertDoublyLinkList(DoublyLinkList* dlist, int pos, ElementType element) {
//創(chuàng)建空節(jié)點
DoublyNode* node = (DoublyLinkList*)malloc(sizeof(DoublyLinkList));
node->date = element;
node->prev = NULL;
node->next = NULL;
//在第一個位置插入結點
if (pos == 1) {
node->next = dlist->next;
dlist->next = node;
node->next->prev = node;
dlist->length++;
return;
}
DoublyLinkList* currNode = dlist->next;
for (int i = 1; currNode && i < pos - 1; i++) {
currNode = currNode->next;
}
if (currNode) {
node->prev = currNode;
if (currNode->next) {
//如果前置結點非空->因為空就表示沒有后繼結點了
//將插入位置的前置結點改為指向新結點
currNode->next->prev = node;
}
node->next = currNode->next;
currNode->next = node;
dlist->length++;
}
}
雙向鏈表的刪除
1.刪除第一個元素


代碼實現(xiàn)

2.刪除其他位置元素


代碼實現(xiàn)

總代碼
void DeleteDoublyLinkList(DoublyLinkList* dlist, int pos) {
if (pos == 1) {
DoublyLinkList* node = dlist->next;
if (node) {
dlist->next;
if (node->next) {
//如果喲有第二個結點,那么設置第二個結點的前置結點為NULL
node->next->prev = NULL;
}
free(node);
dlist->length--;
}
return;
}
DoublyLinkList* node = dlist->next;
for (int i = 1; i < pos; i++) {
node = node->next;
}
if (node) {
if (node->next) {
node->next->prev = node->prve;
}
node->prev->next = node->next;
free(node);
dlist->length--;
}
return;
}
到此這篇關于Java數據結構與算法學習之雙向鏈表的文章就介紹到這了,更多相關Java數據結構 雙向鏈表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Map按單個或多個Value排序當Value相同時按Key排序
Map可以先按照value進行排序,然后按照key進行排序。 或者先按照key進行排序,然后按照value進行排序,這樣操作都行,這篇文章主要介紹了Map按單個或多個Value排序,當Value相同時按Key排序,需要的朋友可以參考下2023-02-02
java定時任務cron表達式每周執(zhí)行一次的坑及解決
這篇文章主要介紹了java定時任務cron表達式每周執(zhí)行一次的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Java 異常的棧軌跡(Stack Trace)詳解及實例代碼
這篇文章主要介紹了Java 異常的棧軌跡(Stack Trace)詳解及實例代碼的相關資料,需要的朋友可以參考下2017-03-03

