(1)雙鏈表與單鏈表的區別在於,多了乙個前向指標,結構體宣告如下。
(2)該宣告同時利用typedef重定義了結構體型別,將struct doublelinknode型別重定義為double_linked_node型別,後續可以直接用其定義變數;
(3)由於在結構體內需遞迴使用結構體定義前驅和後繼指標,但是在定義指標時double_linkend_node還未生效,所以此時只能使用struct doublelinknode * 來宣告指標。
// 雙鏈表結構體:鍊錶內的每個節點有兩個鏈域,乙個指向前驅,乙個指向後繼
typedef struct doublelinknode double_linked_node;
1、說明:輸入陣列指標,陣列長度和陣列元素大小;返回建立好的煉表頭指標
2、步驟:設定頭結點->逐個新增陣列其他元素
3、原始碼:
// 建立雙鏈表:輸入陣列指標,陣列長度,陣列元素大小;返回建立好的煉表頭指標
double_linked_node* createdoublelinkedlist(void *array, int len, int size)
return headnode;
}
// 清理雙鏈表,釋放空間(從當前節點開始,釋放後續的所有鍊錶空間,當前節點之前的空間不釋放)
int cleardoublelinkedlist(double_linked_node *doublelinknode)
// 使用遞迴方法清理,分離本節點與後續節點,不釋放之前的節點
if (doublelinknode->pre != null)
doublelinknode->pre = null;
if (doublelinknode->next == null)
// 還存在後續節點時,遞迴處理,處理下乙個節點,直到無後繼
cleardoublelinkedlist(doublelinknode->next);
// 釋放當前節點空間: 上一層的遞迴處理完成後,需要釋放本層的節點空間
free(doublelinknode->next);
doublelinknode->next = null;
return 0;
}
測試步驟:先根據陣列資料建立乙個鍊錶,輸出內容後,再刪除,測試**如下:
#include #include #include #define list_len 8
// 結構體定義
// 建立雙鏈表函式實現
// 刪除雙鏈表函式實現
static int printfdoublelist(char *info, double_linked_node *node)
printf("\n");
return 0;
}int main(void)
; double_linked_node *temp, *printftemp;
// 建立雙鏈表
temp = createdoublelinkedlist(array, list_len, sizeof(int));
printfdoublelist("createdoublelinkedlist:", temp);
// 清空雙鏈表
cleardoublelinkedlist(temp->next->next);
printfdoublelist("cleardoublelinkedlist:", temp);
while(1);
return 0;
}
執行結果:
建立雙鏈表
c 實現如下 include include typedef struct dulnode dulnode dulnode create double linked list pheader next pre p p next pheader next return pheader int prin...
雙鏈表的建立
資料結構程式設計練習 三 功能1 完成雙向鍊錶的初始化。功能2 實現雙向鍊錶的輸入資料功能。功能3 實現雙向鍊錶求表長功能。功能4 刪除雙向鍊錶中第i個元素結點,需返回第i個是否存在的狀態,並返回刪除值。功能5 檢查雙向鍊錶是否對稱,輸入多個資料進行驗證。功能6 其他功能請自行編寫,驗收時講解給驗收...
結構體 單鏈表
結構體和陣列一樣,都是聚合型別,在進行整體初始化的時候只有一次機會,就是在定義的時候 但是可以區域性初始化 typedef與結構體 不加typedef時定義結構體 struct student student1 student1是結構體的乙個結構體變數,且student未定義,而結構體的名字叫做st...