雙鏈表是在作業系統中常用的資料結構,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅,其結點組成如下:
其示意圖舉例如下:
1、雙鏈表結點定義:
/* 資料元素型別 */typedef int type;/* 雙鏈表結點結構體 */typedef struct _dlistnodedlistnode;
2、相關操作示例
/* 函式宣告 */static dlistnode *dlist_create(void);static int dlist_find(dlistnode *dlist, type find_data);static dlistnode *dlist_change(dlistnode *dlist, int pos, type new_data);static dlistnode *dlist_insert(dlistnode *dlist, type insert_data, int pos);static dlistnode *dlist_delete(dlistnode *dlist, type del_data); static void dlist_print_int(dlistnode *dlist);
(1)建立乙個雙鏈表: (5,2,0,13,14)示意圖:
**:
static dlistnode *dlist_create(void) return node;}
(2)元素查詢:
static int dlist_find(dlistnode *dlist, type find_data) else } return error;}
(3)元素替換:
static dlistnode *dlist_change(dlistnode *dlist, int pos, type new_data) temp->data = new_data; return dlist;}
(4)結點插入:![](https://pic.w3help.cc/887/85cf397332ed6546df71563744f54.jpeg)
static dlistnode *dlist_insert(dlistnode *dlist, type insert_data, int pos) /* 頭部插入 */ if (1 == pos) else /* 中間插入 */ if (temp->next != null) /* 尾部插入 */ else } return dlist;}
(5)結點刪除:
static dlistnode *dlist_delete(dlistnode *dlist, type del_data) temp = temp->next; } return dlist;}
3、驗證主函式:
int main(void) else printf("把第1個位置的元素替換為2020得到新的雙鏈表為:"); dlist = dlist_change(dlist, 1, 2020); dlist_print_int(dlist); printf("第2個位置插入888得到新的雙鏈表為:"); dlist = dlist_insert(dlist, 888, 2); dlist_print_int(dlist); printf("刪除元素2得到新的雙鏈表為:"); dlist = dlist_delete(dlist, 2); dlist_print_int(dlist); return 0;}
執行結果:
廣義表怎麼取表中間元素 廣義表的有關知識點
概念 廣義表 lists,又稱列表 是一種非線性的資料結構,是線性表的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。它被廣泛的應用於人工智慧等領域的表處理語言lisp語言中。在lisp語言中,廣義表是一種最基本的資料結構,就連lisp 語言的程式也表示為一系列的廣義表。定義 廣...
20200711 取鍊錶中間的元素
在xbox程式中有乙個redeem a code,意思為 輸入啟用碼 1 找到單向鍊錶中間那個元素,如果有兩個,則取前面的乙個。思路 掃瞄一遍得出長度,取出中間位置。typedef struct node node p為指向單鏈表的第乙個節點 node findmiddleelement node ...
鍊錶的實現 單鏈表 雙鏈表
鍊錶知識的引入 對於之前我們接觸到的陣列知識,要想儲存多個物件,首先想到的一定是物件陣列。但是陣列是乙個長度固定的線性結構,一旦內容不足或者過多,都會在成記憶體資源的浪費,由此引入鍊錶充分解決資源浪費問題。class node private屬性需要設定getter setter方法 public ...