例解單鏈表的基本運算(下)

2021-06-04 05:28:45 字數 1713 閱讀 7182

(3)、插入

單鏈表的插入運算最主要的操作是獲得插入結點,例子**通過多分支選擇結構同時支援按序號查詢和按值查詢。 

#define find_by_num 0

#define find_by_key 1

void insert_node_with_headnode(list_node_p head, list_node_p tmp, unsigned int cmd, void *data)

if (p == null)

tmp -> next = p -> next;

p -> next = tmp;

}

(4)、刪除

單鏈表的刪除運算最主要的操作也是獲得刪除結點,例子**也能支援按序號查詢和按值查詢(這裡的按值查詢是先獲得此值所在結點在鍊錶中的序號,然後再根據序號查詢它的直接前趨)。 

void delete_node_with_headnode(list_node_p head, unsigned int cmd, void *data)

p = get_node_with_headnode(head, j);

}if (p == null || p -> next == null)

work = p -> next;

p -> next = p -> next -> next; //p -> next = work -> next

free(work);

}

(5)、銷毀鍊錶 

static void destroy_list(list_node_p head)

}

(6)、列印鍊錶每個結點的資料域 

static void print_list(list_node_p head)

printf("\n");

}

(7)、鍊錶長 

static int list_length(list_node_p head)

return len;

}

綜合測試上面所講的函式: 

int main(void)

首先,執行程式,依次輸入以下五位學生的相關資訊,然後按quit退出。 

輸入結果:

再次,刪除學號為201201008學生的資訊,刪除成功後列印的資訊如下:

最後,銷毀所建立的鍊錶。

3、單迴圈鍊錶

單迴圈鍊錶的特點是表中終止結點的指標域指向頭結點(或者開始結點),整個鍊錶形成乙個環,如下圖所示: 

單迴圈鍊錶的操作和單鏈表基本一致,差別僅在於演算法中的迴圈條件不是p或p->next是否為空,而是它們是否等於頭指標。

(1)、僅設尾指標的單迴圈鍊錶

用尾指標表示的單迴圈鍊錶對開始結點和終止結點的查詢時間都是o(1),而表的操作常常是在表的首尾位置上進行,因此,實用中多採用尾指標表示單迴圈鍊錶,如下圖所示: 

(2)兩個單迴圈鍊錶(尾指標)的合併

若在單鏈表或頭指標表示的單迴圈鍊錶上做這種合併操作,都需要遍歷第乙個鍊錶,找到終止結點,而在尾指標表示的單迴圈鍊錶上,僅須要修改相應的指標即可,如下圖所示:

list_node_p merge_list(list_node_p a, list_node_p b)

10 4單鏈表基本運算

單鏈表基本運算 include include typedef struct node lnode 單鏈表節點型別 lnode createlinklist 在表尾生成單鏈表 return head 返回單鏈表表頭指標 int length linklist lnode head 求單鏈表的長度 r...

單鏈表的各種基本運算

輸入 實驗題2 2 include includetypedef char elemtype typedef struct lnode linklist 使用頭插法 void createlistf linklist l,elemtype a,int n 使用尾插法 void createlistr...

jmu ds 單鏈表的基本運算

實現單鏈表的基本運算 初始化 插入 刪除 求表的長度 判空 釋放。1 初始化單鏈表l,輸出l next的值 2 依次採用尾插法插入元素 輸入分兩行資料,第一行是尾插法需要插入的字元資料的個數,第二行是具體插入的字元資料。3 輸出單鏈表l 4 輸出單鏈表l的長度 5 判斷單鏈表l是否為空 6 輸出單鏈...