国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

單向順序鏈表的創(chuàng)建,增,刪,減,查

這篇具有很好參考價值的文章主要介紹了單向順序鏈表的創(chuàng)建,增,刪,減,查。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

單向順序鏈表的創(chuàng)建,增,刪,減,查

/*******************************************************************
 *
 *	file name:	單向順序鏈表的創(chuàng)建,增,刪,減,查
 *	author	 :  17647576169@163.com
 *	date	 :	2024-4-22
 *	function :
 * 	note	 :  None
 *
 *	CopyRight (c)  2024   17647576169@163.com   All Right Reseverd
 *
 * *****************************************************************/

#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 指的是單向鏈表中的結點有效數據類型,用戶可以根據需要進行修改
typedef int DataType_t;

// 構造鏈表的結點,鏈表中所有結點的數據類型應該是相同的
typedef struct LinkedList
{
	DataType_t data;		 // 結點的數據域
	struct LinkedList *next; // 結點的指針域

} LList_t;

/********************************************************************
 *
 *	name	 :	LList_Create
 *	function :  創(chuàng)建一個空的單向順序鏈表,空鏈表應該有一個頭結點,對鏈表進行初始化
 *	argument :	None
 *
 *	retval	 :  返回創(chuàng)建的鏈表的頭地址
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/

LList_t *LList_Create(void)
{
	// 1.創(chuàng)建一個頭結點并對頭結點申請內存
	LList_t *Head = (LList_t *)calloc(1, sizeof(LList_t));
	if (NULL == Head)
	{
		perror("Calloc memory for Head is Failed");
		exit(-1);
	}

	// 2.對頭結點進行初始化,頭結點是不存儲有效內容的!?。?	Head->next = NULL;

	// 3.把頭結點的地址返回即可
	return Head;
}
/********************************************************************
 *
 *	name	 :	LList_NewNode
 *	function :  創(chuàng)建新的結點,并對新結點進行初始化(數據域 + 指針域)
 *	argument :	@data:需插入的數據
 *
 *	retval	 :  返回新創(chuàng)建鏈表節(jié)點的地址
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/

LList_t *LList_NewNode(DataType_t data)
{
	// 1.創(chuàng)建一個新結點并對新結點申請內存
	LList_t *New = (LList_t *)calloc(1, sizeof(LList_t));
	if (NULL == New)
	{
		perror("Calloc memory for NewNode is Failed");
		return NULL;
	}

	// 2.對新結點的數據域和指針域進行初始化
	New->data = data;
	New->next = NULL;

	return New;
}

/********************************************************************
 *
 *	name	 :	LList_HeadInsert
 *	function :  向鏈表的頭部進行數據插入
 *	argument :	@head:目標鏈表
 *				@data:需插入的數據
 *	retval	 :  返回新創(chuàng)建鏈表節(jié)點的地址
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/

bool LList_HeadInsert(LList_t *Head, DataType_t data)
{
	// 1.創(chuàng)建新的結點,并對新結點進行初始化
	LList_t *New = LList_NewNode(data);
	if (NULL == New)
	{
		printf("can not insert new node\n");
		return false;
	}

	// 2.判斷鏈表是否為空,如果為空,則直接插入即可
	if (NULL == Head->next)
	{
		Head->next = New;
		return true;
	}

	// 3.如果鏈表為非空,則把新結點插入到鏈表的頭部
	New->next = Head->next;
	Head->next = New;

	return true;
}

/********************************************************************
 *
 *	name	 :	LList_TailInsert
 *	function :  向鏈表的尾部進行數據插入
 *	argument :	@head:目標鏈表
 *				@data:需插入的數據
 *	retval	 :  返回1成功0失敗
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/

bool LList_TailInsert(LList_t *Head, DataType_t data)
{
	// 1.創(chuàng)建新的結點,并對新結點進行初始化
	LList_t *New = LList_NewNode(data);
	if (NULL == New)
	{
		printf("can not insert new node\n");
		return false;
	}

	// 2.判斷鏈表是否為空,如果為空,則直接插入即可
	if (NULL == Head->next)
	{
		Head->next = New;
		return true;
	}

	// 3對鏈表的頭文件的地址進行備份
	LList_t *Phead = Head;
	// 4遍歷鏈表找到尾部
	while (Phead->next)
	{
		// 把頭的直接后繼作為新的頭結點
		Phead = Phead->next;
	}
	// 5.把新結點插入到鏈表的尾部
	Phead->next = New;
	return true;
}

/********************************************************************
 *
 *	name	 :	LList_TailInsert
 *	function :  向鏈表的任意位置插入
 *	argument :	@head:目標鏈表
 *				@data:需插入的數據
 *				@dest:插入位置
 *	retval	 :  返回1成功0失敗
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/

bool LList_TailInsert(LList_t *Head, DataType_t data, int dest)
{
	// 1.創(chuàng)建新的結點,并對新結點進行初始化
	LList_t *New = LList_NewNode(data);

	if (NULL == New)
	{
		printf("can not insert new node\n");
		return false;
	}

	// 2.判斷鏈表是否為空,如果為空,則直接插入即可
	if (NULL == Head->next)
	{
		Head->next = New;
		return true;
	}
	if (NULL == Head->next->next)
	{
		Head->next->next = New;
		return true;
	}
	// 定義兩指針備份首節(jié)點地址及其后置
	LList_t *P1 = Head->next;
	LList_t *P2 = P1->next;
	// 偏移找的插入位置
	for (int i = 0; i < dest - 1; i++)
	{
		P1 = P1->next;
		P2 = P2->next;
	}
	// 把新結點插入
	New->next = P2->next;
	P1->next = New;
	P2->next = NULL;
	free(P2);
	return true;
}

/********************************************************************
 *
 *	name	 :	LList_DestInsert
 *	function :  刪除鏈表中的數據
 *	argument :	@head:目標鏈表
 *				@data:需刪除的數據
 *
 *	retval	 :  返回1成功0失敗
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/

bool LList_DestInsert(LList_t *Head, DataType_t data)
{
	// 判斷鏈表是否為空
	if (NULL == Head->next)
	{
		return false;
	}
	// 要刪除的節(jié)點在第一個
	if (data == Head->next)
	{
		// 備份首節(jié)點地址
		LList_t *P = Head;
		Head->next = Head->next->next;
		P->next = NULL;
		free(P);
		return true;
	}
	{
		/* code */
	}
	// 備份頭節(jié)點
	LList_t *P1 = Head->next;
	LList_t *P2 = P1->next;
	while (P2->next)
	{
		// 找到data數據所在位置
		if (data == P2->data)
		{
			// 如果data所在節(jié)點是為尾節(jié)點,如果在則執(zhí)行刪除
			if (NULL == P2->next)
			{
				P1->next = NULL;
				free(P2);
				return true;
			}
			// 如果data所在節(jié)點不是為尾節(jié)點
			// P1鏈接P2的下節(jié)點
			P1 = P2->next;
			// 初始化P2的指針域
			P2->next = NULL;
			// 釋放堆空間
			free(P2);
			return true;
		}
		// 偏移
		P1 = P1->next;
		P2 = P2->next;
	}
}

/********************************************************************
 *
 *	name	 :	LList_Print
 *	function :  遍歷鏈表
 *	argument :	@head:目標鏈表
 *
 *
 *	retval	 :  none
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/

void LList_Print(LList_t *Head)
{
	// 對鏈表的頭文件的地址進行備份
	LList_t *Phead = Head;

	// 首結點
	while (Phead->next)
	{
		// 把頭的直接后繼作為新的頭結點
		Phead = Phead->next;

		// 輸出頭結點的直接后繼的數據域
		printf("data = %d\n", Phead->data);
	}
}

?```

文章來源地址http://www.zghlxwxcb.cn/news/detail-855701.html

到了這里,關于單向順序鏈表的創(chuàng)建,增,刪,減,查的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 單向帶頭鏈表的添加修改刪除操作

    單向帶頭鏈表的添加修改刪除操作

    ? 雙向鏈表的添加操作

    2024年02月02日
    瀏覽(18)
  • 【數據結構C/C++】單向鏈表的增刪改查

    單向鏈表是比較常用的數據結構,最近再面試手撕算法的時候偶爾有遇到,所以就花了一點時間簡單的寫了一下C/C++版本的單向鏈表的代碼。 這里我推薦使用C++版本,因為C++版本我特地優(yōu)化了一下,提供了用戶輸入的功能,當然兩個語言差異不大,注釋可以直接看C版本的,比

    2024年02月07日
    瀏覽(18)
  • 【數據結構】單向鏈表的增刪查改以及指定pos位置的插入刪除

    【數據結構】單向鏈表的增刪查改以及指定pos位置的插入刪除

    目錄 ?單向鏈表的概念及結構 ?尾插 頭插 尾刪 ?編輯 ?頭刪 ?查找 ?在pos位置前插 ?在pos位置后插 ?刪除pos位置 ?刪除pos的后一個位置 總結 代碼? 概念:鏈表是一種 物理存儲結構上非連續(xù) 、非順序的存儲結構,數據元素的 邏輯順序 是通過鏈表中的 指針鏈接 次序實現的

    2024年02月05日
    瀏覽(25)
  • 數據結構_鏈表_單向循環(huán)鏈表的初始化、插入、刪除、修改、查詢打印(基于C語言實現)

    數據結構_鏈表_單向循環(huán)鏈表的初始化、插入、刪除、修改、查詢打?。ɑ贑語言實現)

    版本: 2024年4月25日 V1.0 發(fā)布于博客園 目錄 目錄 單向循環(huán)鏈表公式 初始化單向循環(huán)鏈表 構建單向循環(huán)鏈表結點 創(chuàng)建一個空鏈表(僅頭結點) 創(chuàng)建一個新結點 插入數據 頭插 中插 尾插 刪除數據 頭刪 中刪 尾刪 查詢打印數據 遍歷打印 測試 測試結果: 完整代碼 CircularLinkedLis

    2024年04月25日
    瀏覽(51)
  • 順序表與鏈表的區(qū)別

    目錄 一、順序表和鏈表的比較 順序表 優(yōu)點: 缺點: 鏈表 優(yōu)點 缺點 二、順序表和鏈表的區(qū)別 1.順序表和鏈表都具有增、刪、查、改功能,但算法復雜度卻不相同。 2、從數據元素存儲的內存角度來看 三、順序表與鏈表選取方案 順序表的特點是邏輯上相鄰數據元素,物理存

    2024年02月08日
    瀏覽(562)
  • 順序表和鏈表的練習題

    順序表和鏈表的練習題

    該題目需要先對順序表進行遍歷至元素x正確插入位置,再對順序表完成插入操作。因此涉及到for循環(huán)與if語句的使用 該題目需要對順序表制定元素刪除,并且還需要返回值。所以定義的函數接口不能為void類型,使用for循環(huán)對p后繼順序表元素進行遍歷前移,且考慮可能出現刪

    2024年04月22日
    瀏覽(93)
  • 【編織時空三:探究順序表與鏈表的數據之旅】

    【編織時空三:探究順序表與鏈表的數據之旅】

    鏈表OJ題 思路一:刪除頭結點時另做考慮(由于頭結點沒有前一個結點) 思路二:添加一個虛擬頭結點,刪除頭結點就不用另做考慮 思路:通過三個指針的操作,每次將當前節(jié)點反轉并向前移動 ? 思路:頭插法 思路:快慢指針的前進方向相同,且它們步伐的「差」是恒定

    2024年02月11日
    瀏覽(95)
  • 【編織時空四:探究順序表與鏈表的數據之旅】

    【編織時空四:探究順序表與鏈表的數據之旅】

    鏈表的分類 帶頭雙向循環(huán)鏈表接口實現 順序表和鏈表的區(qū)別 緩存利用率參考存儲體系結構 以及 局部原理性。 實際中鏈表的結構非常多樣,以下情況組合起來就有8種鏈表結構: 1. 單向或者雙向 2. 帶頭或者不帶頭 3. 循環(huán)或者非循環(huán)? 雖然有這么多的鏈表的結構,但是我們實

    2024年02月12日
    瀏覽(83)
  • 數據結構(王道)——線性表之靜態(tài)鏈表&順序表和鏈表的比較

    數據結構(王道)——線性表之靜態(tài)鏈表&順序表和鏈表的比較

    ? 如何定義一個靜態(tài)鏈表 ? ? 初始化靜態(tài)鏈表: ? 靜態(tài)鏈表的查找、插入、刪除 ? ? ? ? ? 創(chuàng): 銷: ? 增、刪: ? 查: ? 順序表、鏈表該如何選擇? ?

    2024年02月16日
    瀏覽(718)
  • 數據結構實驗---順序表的合并---鏈表的基本操作---重點解析約瑟夫問題

    數據結構實驗---順序表的合并---鏈表的基本操作---重點解析約瑟夫問題

    實驗的寫法多種多樣,但本文并未采用 #define 定義容量的寫法,這樣寫已經是很老舊過時的寫法。所有實驗主體采用均為動態(tài)開辟,后續(xù)如果利用 C++ 來寫或許會應用更多語法… 本篇展示數據結構的兩個實驗 其中,重點分析約瑟夫問題 實驗中代碼的命名風格等均與下方博客

    2024年02月16日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包