欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

一、創(chuàng)建

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

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

SListNode* BuyListNode(SLTDadaType x);//創(chuàng)建一個節(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);//查找一個節(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)建一個節(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.只有一個節(jié)點(diǎn)
	//3.有多個節(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é)點(diǎn)的前一個節(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("對不起,您要修改的值不存在\n");
	}
}

總結(jié)

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

最后,也請大家多多支持,求關(guān)注?。。?/p>

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

相關(guān)文章

  • C++模擬如何實(shí)現(xiàn)vector

    C++模擬如何實(shí)現(xiàn)vector

    這篇文章主要介紹了C++模擬如何實(shí)現(xiàn)vector問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 數(shù)組名不等于指針?sizeof()函數(shù)求數(shù)組大小錯誤問題及解決

    數(shù)組名不等于指針?sizeof()函數(shù)求數(shù)組大小錯誤問題及解決

    這篇文章主要介紹了數(shù)組名不等于指針?sizeof()函數(shù)求數(shù)組大小錯誤問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • c++實(shí)現(xiàn)簡單隨機(jī)數(shù)的代碼

    c++實(shí)現(xiàn)簡單隨機(jī)數(shù)的代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于c++實(shí)現(xiàn)簡單隨機(jī)數(shù)的代碼內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-05-05
  • C++使用郵件槽實(shí)現(xiàn)ShellCode跨進(jìn)程傳輸

    C++使用郵件槽實(shí)現(xiàn)ShellCode跨進(jìn)程傳輸

    在計算機(jī)安全領(lǐng)域,進(jìn)程間通信(IPC)一直是一個備受關(guān)注的話題,在本文中,我們將探討如何使用Windows郵件槽(Mailslot)實(shí)現(xiàn)ShellCode的跨進(jìn)程傳輸,需要的可以參考下
    2023-12-12
  • Qt實(shí)現(xiàn)自定義矩陣布局

    Qt實(shí)現(xiàn)自定義矩陣布局

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)自定義矩陣布局,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言實(shí)現(xiàn)順序表的基本操作指南(注釋很詳細(xì))

    C語言實(shí)現(xiàn)順序表的基本操作指南(注釋很詳細(xì))

    線性表是最簡單的數(shù)據(jù)結(jié)構(gòu),而順序表又是最簡單的線性表,其基本思想是用一段地址連續(xù)的儲存單元依次存儲線性表的數(shù)據(jù)元素,下面這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)順序表的基本操作,需要的朋友可以參考下
    2021-10-10
  • C++使用一棵紅黑樹同時封裝出map和set實(shí)例代碼

    C++使用一棵紅黑樹同時封裝出map和set實(shí)例代碼

    紅黑樹(Red?Black?Tre)是一種自平衡二叉查找樹,是在計算機(jī)科學(xué)中用到的一種數(shù)據(jù)結(jié)構(gòu),典型的用途是實(shí)現(xiàn)關(guān)聯(lián)數(shù)組,下面這篇文章主要給大家介紹了關(guān)于C++使用一棵紅黑樹同時封裝出map和set的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • C++實(shí)踐Time類中的運(yùn)算符重載參考方法

    C++實(shí)踐Time類中的運(yùn)算符重載參考方法

    今天小編就為大家分享一篇關(guān)于C++實(shí)踐Time類中的運(yùn)算符重載參考方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • linux安裝mysql和使用c語言操作數(shù)據(jù)庫的方法 c語言連接mysql

    linux安裝mysql和使用c語言操作數(shù)據(jù)庫的方法 c語言連接mysql

    Linux下使用C語言操作數(shù)據(jù)庫的方法,我將從MySQL環(huán)境的搭建,MySQL命令的使用到使用C接口來操作MySQL等過程詳細(xì)的介紹在Linux下管理MySQL數(shù)據(jù)庫的方法
    2014-01-01
  • 深入淺出理解C語言指針的綜合應(yīng)用

    深入淺出理解C語言指針的綜合應(yīng)用

    指針是指向另一個變量的變量。意思是一個指針保存的是另一個變量的內(nèi)存地址。換句話說,指針保存的并不是普通意義上的數(shù)值,而是另一個變量的地址值。一個指針保存了另一個變量的地址值,就說這個指針“指向”了那個變量
    2022-02-02

最新評論