最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言 單向鏈表的增刪查改快速掌握

 更新時(shí)間:2021年11月17日 14:04:13   作者:、薛定諤的貓~  
單向鏈表特點(diǎn)是鏈表的鏈接方向是單向的,訪問要通過順序讀取從頭部開始。鏈表是使用指針構(gòu)造的列表,是由一個(gè)個(gè)結(jié)點(diǎn)組裝起來的,又稱為結(jié)點(diǎn)列表。其中每個(gè)結(jié)點(diǎn)都有指針成員變量指向列表中的下一個(gè)結(jié)點(diǎn),head指針指向第一個(gè)結(jié)點(diǎn)稱為表頭,而終止于最后一個(gè)指向nuLL的指針

前言

鏈表是線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),它可以以O(shè)(1)的時(shí)間復(fù)雜度進(jìn)行插入或者刪除,同時(shí)由于是鏈?zhǔn)浇Y(jié)構(gòu)相比順序表而言,不會(huì)存在空間浪費(fèi)的情況。而鏈表又分為帶頭單向鏈表,不帶頭單向鏈表,帶頭循環(huán)鏈表,不帶頭循環(huán)鏈表,帶頭雙向循環(huán)鏈表,不帶頭雙向循環(huán)鏈表,帶頭雙向鏈表,不帶頭雙向鏈表,總共有八種,其中結(jié)構(gòu)最簡(jiǎn)單的是不帶頭單向鏈表,也是實(shí)現(xiàn)起來最容易出錯(cuò)的。并且我們?cè)诰W(wǎng)上進(jìn)行鏈表的oj時(shí),題目基本也是不帶頭的單向鏈表,而且也是互聯(lián)網(wǎng)大廠面試中最容易考的。

一、創(chuàng)建

typedef int SLTDadaType;//存放的數(shù)據(jù)類型
struct SListNode
{
	SLTDadaType _data;//存放的數(shù)據(jù)
	struct SListNode* _next;//指向下一個(gè)節(jié)點(diǎn)的指針
};
typedef struct SListNode  SListNode;

二、單向鏈表的函數(shù)聲明

SListNode* BuyListNode(SLTDadaType x);//創(chuàng)建一個(gè)節(jié)點(diǎn)
SListNode* SListPushBack(SListNode* head, SLTDadaType x);//尾插
SListNode* SListPopBack(SListNode* head);//頭插
SListNode* SListPushFornt(SListNode* head, SLTDadaType x);//尾刪
SListNode* SListPopFornt(SListNode* head);//頭刪
SListNode* SListFind(SListNode* head, SLTDadaType x);//查找一個(gè)節(jié)點(diǎn)
void SListModify(SListNode* head, SLTDadaType x,SLTDadaType y);//x修改

三、函數(shù)實(shí)現(xiàn)

1.創(chuàng)建節(jié)點(diǎn)

SListNode* BuyListNode(SLTDadaType x)
{
	SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
	newnode->_data = x;
	newnode->_next = NULL;
	return newnode;
}

2.尾插節(jié)點(diǎn)

SListNode* SListPushBack(SListNode* head, SLTDadaType x)
{
	SListNode* newnode = BuyListNode(x);//無論節(jié)點(diǎn)是否為空,都先進(jìn)行創(chuàng)建一個(gè)節(jié)點(diǎn)
 
	if (head == NULL)  //頭節(jié)點(diǎn)為空
	{
		head = newnode;
		return head;
	}
	else //頭節(jié)點(diǎn)不為空,直接遍歷到鏈表結(jié)尾進(jìn)行尾插
	{
		SListNode* tail = head; 
		while (tail->_next != NULL)
		{
			tail = tail->_next;
		}
		tail->_next = newnode;
		return head;
	}
}

3.頭插

SListNode* SListPushFornt(SListNode* head, SLTDadaType x)
{
	SListNode* newnode = BuyListNode(x);
	newnode->_next = head;
	head = newnode;
	return head;
}

4.尾刪

SListNode* SListPopBack(SListNode* head)
{
	//1.空
    //2.只有一個(gè)節(jié)點(diǎn)
	//3.有多個(gè)節(jié)點(diǎn)
	if (head == NULL)
	{
		return head;
	}
	else if (head->_next== NULL)
	{
		free(head);
		head = NULL;
		return head;
	}
	else
	{
		SListNode* prev = NULL;
		SListNode* tail = head;
		while (tail->_next != NULL)  //利用前指針來保存要?jiǎng)h除的節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)
		{
			prev = tail;
			tail = tail->_next;
		}
		free(tail);
		if (prev != NULL)
		prev->_next = NULL;
		return head;
	}
}

5.頭刪

SListNode* SListPopFornt(SListNode* head)
{
 
	if (head == NULL)
	{
		return head;
	}
	else
	{
		SListNode* cur = head->_next;
		free(head);
		head = cur;
		return head;
	}
}

6.查找節(jié)點(diǎn)

SListNode* SListFind(SListNode* head, SLTDadaType x)
{
	SListNode* cur = head;
	while (cur)
	{
		if (cur->_data == x)
		{
			return cur;
		}
		else
		{
			cur = cur->_next;
		}
	}
	return NULL;
}

7.修改

void SListModify(SListNode* head, SLTDadaType x, SLTDadaType y)//x修改
{
	SListNode* find = SListFind(head, x);
	if (find)
	{
		find->_data = y;
	}
	else
	{
		printf("對(duì)不起,您要修改的值不存在\n");
	}
}

總結(jié)

本篇文章主要是針對(duì)單向鏈表一些基本操作的代碼實(shí)現(xiàn),若有寫的錯(cuò)誤或值得改進(jìn)的地方,請(qǐng)大家多多留言指出。

最后,也請(qǐng)大家多多支持,求關(guān)注!!!

到此這篇關(guān)于C語言 單向鏈表的增刪查改快速掌握的文章就介紹到這了,更多相關(guān)C語言 單向鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)超市計(jì)價(jià)收款系統(tǒng)

    C語言實(shí)現(xiàn)超市計(jì)價(jià)收款系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)超市計(jì)價(jià)收款系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實(shí)現(xiàn)圖形界面雙人五子棋游戲

    C++實(shí)現(xiàn)圖形界面雙人五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖形界面雙人五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言代碼實(shí)現(xiàn)通訊錄管理系統(tǒng)

    C語言代碼實(shí)現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言庫函數(shù)qsort的使用詳解

    C語言庫函數(shù)qsort的使用詳解

    C語言庫函數(shù)中的qsort的是一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù),這篇文章主要介紹了C語言庫函數(shù)qsort的使用,需要的朋友可以參考下
    2022-06-06
  • OpenCV實(shí)現(xiàn)圖像拼接案例

    OpenCV實(shí)現(xiàn)圖像拼接案例

    這篇文章主要介紹了OpenCV實(shí)現(xiàn)圖像拼接案例,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • C++ 類和對(duì)象基礎(chǔ)篇

    C++ 類和對(duì)象基礎(chǔ)篇

    類是創(chuàng)建對(duì)象的模板,一個(gè)類可以創(chuàng)建多個(gè)對(duì)象,每個(gè)對(duì)象都是類類型的一個(gè)變量;創(chuàng)建對(duì)象的過程也叫類的實(shí)例化。每個(gè)對(duì)象都是類的一個(gè)具體實(shí)例(Instance),擁有類的成員變量和成員函數(shù)
    2020-01-01
  • 解析內(nèi)存對(duì)齊 Data alignment: Straighten up and fly right的詳解

    解析內(nèi)存對(duì)齊 Data alignment: Straighten up and fly right的詳解

    對(duì)于所有直接操作內(nèi)存的程序員來說,數(shù)據(jù)對(duì)齊都是很重要的問題.數(shù)據(jù)對(duì)齊對(duì)你的程序的表現(xiàn)甚至能否正常運(yùn)行都會(huì)產(chǎn)生影響
    2013-05-05
  • C語言 單向鏈表的增刪查改快速掌握

    C語言 單向鏈表的增刪查改快速掌握

    單向鏈表特點(diǎn)是鏈表的鏈接方向是單向的,訪問要通過順序讀取從頭部開始。鏈表是使用指針構(gòu)造的列表,是由一個(gè)個(gè)結(jié)點(diǎn)組裝起來的,又稱為結(jié)點(diǎn)列表。其中每個(gè)結(jié)點(diǎn)都有指針成員變量指向列表中的下一個(gè)結(jié)點(diǎn),head指針指向第一個(gè)結(jié)點(diǎn)稱為表頭,而終止于最后一個(gè)指向nuLL的指針
    2021-11-11
  • C語言程序如何求學(xué)生總成績(jī)和平均成績(jī)

    C語言程序如何求學(xué)生總成績(jī)和平均成績(jī)

    這篇文章主要介紹了C語言程序如何求學(xué)生總成績(jī)和平均成績(jī),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 學(xué)習(xí)C和C++的9點(diǎn)經(jīng)驗(yàn)總結(jié)

    學(xué)習(xí)C和C++的9點(diǎn)經(jīng)驗(yàn)總結(jié)

    本文給大家總結(jié)了一下我們?cè)趯W(xué)習(xí)C和C++的時(shí)候的一些經(jīng)驗(yàn)和需要注意的事項(xiàng),希望能給大家一些幫助,少走些彎路
    2015-12-12

最新評(píng)論

新巴尔虎右旗| 交口县| 丰原市| 茶陵县| 临洮县| 巢湖市| 泸西县| 马关县| 黔西| 泗水县| 乐清市| 东兰县| 措美县| 罗源县| 佛冈县| 西和县| 齐齐哈尔市| 昭觉县| 望谟县| 洛阳市| 阿拉尔市| 高安市| 全椒县| 泰州市| 邯郸县| 保靖县| 庆阳市| 洛隆县| 罗江县| 南江县| 文昌市| 绥滨县| 宣城市| 孟村| 芮城县| 平谷区| 台安县| 新和县| 平果县| 吉木萨尔县| 水城县|