Java數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)之雙向鏈表
雙向鏈表的儲存結(jié)構(gòu)示意圖
雙向鏈表的初始化結(jié)構(gòu)
1.雙向鏈表的結(jié)點
代碼實現(xiàn)
//雙向鏈表的結(jié)點,包含一個數(shù)據(jù)域,兩個指針域 typedef struct DoublyNode { ElementType date; //數(shù)據(jù)域 struct DoublyNode* prev; //指向前綴結(jié)點 struct DoublyNode* next; //指向后綴結(jié)點 }DoublyNode;
2.雙向鏈表的頭結(jié)點
//雙向鏈表 typedef struct DoublyLinkList { int length; DoublyNode* next; };
3.總代碼
//雙向鏈表的結(jié)點,包含一個數(shù)據(jù)域,兩個指針域 typedef struct DoublyNode { ElementType date; //數(shù)據(jù)域 struct DoublyNode* prev; //指向前綴結(jié)點 struct DoublyNode* next; //指向后綴結(jié)點 }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; //在第一個位置插入結(jié)點 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) { //如果前置結(jié)點非空->因為空就表示沒有后繼結(jié)點了 //將插入位置的前置結(jié)點改為指向新結(jié)點 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) { //如果喲有第二個結(jié)點,那么設(shè)置第二個結(jié)點的前置結(jié)點為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; }
到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)之雙向鏈表的文章就介紹到這了,更多相關(guān)Java數(shù)據(jù)結(jié)構(gòu) 雙向鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA面試題 從源碼角度分析StringBuffer和StringBuilder的區(qū)別
這篇文章主要介紹了JAVA面試題 從源碼角度分析StringBuffer和StringBuilder的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,下面我們來一起學(xué)習(xí)下吧2019-07-07mybatis-plus?Wrapper條件構(gòu)造器updateForSet更新方式
這篇文章主要介紹了mybatis-plus?Wrapper條件構(gòu)造器updateForSet更新方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03Java多線程編程中易混淆的3個關(guān)鍵字總結(jié)
這篇文章主要介紹了Java多線程編程中易混淆的3個關(guān)鍵字總結(jié),本文總結(jié)了、volatile、ThreadLocal、synchronized等3個關(guān)鍵字,對這幾個容易混淆概念的關(guān)鍵字分別做了講解,需要的朋友可以參考下2015-03-03IDEA 顯示Run Dashboard窗口的2種方式(推薦)
這篇文章主要介紹了IDEA 顯示Run Dashboard窗口的2種方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08