單連結串列功能函式練習——按規定插入指定節點及刪除最小值節點(C語言)

Rice_rice發表於2024-04-22

本文屬於資料結構中,單連結串列練習的一部分。共設計了兩個功能函式,詳細資訊如下。

設計在指定值的位置處,插入指定資料的函式

* 函式名稱: LList_DestInsert

* 函式功能: 在指定值位置處,插入指定的資料data

* 函式引數:

​ LList_t *Head: 需要操作的連結串列頭節點

​ DataType_t dest: 插入位置的值

​ DataType_t data: 需要插入的指定的資料

* 返回結果: true or false

* 注意事項: None

* 函式作者: ni456xinmie@163.com

* 建立日期: 2024/04/22

* 修改歷史:

* 函式版本: V1.0

bool LList_DestInsert(LList_t *Head, DataType_t dest, DataType_t data)
{
	// 1.建立新的結點,並對新結點進行初始化
	LList_t *New = LList_NewNode(data);
	if (NULL == New)
	{
		printf("can not insert new node\n");
		return false;
	}
	LList_t *tmp = Head;
	while (tmp->data != dest && tmp->next != NULL) // 2.移動到指定位置節點
	{
		tmp = tmp->next;
	}
	if (NULL == tmp->next)
	{
		if (tmp->data == dest)
		{
			New->next = NULL; // 3.如果指定目標值在末尾,且dest正好也在末尾,可進行尾插操作
			tmp->next = New->next;
			return true;
		}
		else
		{
			printf("There is no dest\n"); // 4.如果未找到指定目標值,則返回
			return false;
		}
	}
	New->next = tmp->next; // 5.如果指定目標值在中間,則進行插入操作。
	tmp->next = New->next;
	return true;
}

設計刪除單連結串列鍾最小值節點的函式

* 函式名稱: LList_DeleteMin

* 函式功能: 刪除單連結串列中的最小值節點

* 函式引數:

* LList_t *Head: 需要操作的連結串列頭節點

* 返回結果: true or false

* 注意事項: None

* 函式作者: ni456xinmie@163.com

* 建立日期: 2024/04/22

* 修改歷史:

* 函式版本: V1.0

···

bool LList_DeleteMin(LList_t *Head)
{
	LList_t *tmp1 = Head->next;		// 用來遍歷
	LList_t *tmpFormer = Head;		// 用來存放目標指標前一個節點
	LList_t *tmpDest = Head->next;	// 用來存放目標指標
	DataType_t tmpMin = tmp1->data; // 用來存放最小值
	if (!tmp1)						// 如果是空表
	{
		printf("The list is NULL");
		return false;
	}
	if (!tmp1->next) // 只有一個元素,就刪掉
	{
		free(Head->next);
		Head = NULL;
		return true;
	}
	while (tmp1->next) // 兩個以上的元素,定位到最小元素
	{
		if (tmpMin > tmp1->next->data)
		{
			tmpMin = tmp1->next->data;
			tmpDest = tmp1->next;
			tmpFormer = tmp1;
		}
		tmp1 = tmp1->next;
	}
	tmpFormer->next = tmpDest->next; // 進行刪除操作
	free(tmpDest);
	return true;
}

相關文章