(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 輸出單鏈...