雙鏈表 結構體定義 建立 清除

2022-04-13 18:23:44 字數 1908 閱讀 4234

(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...