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

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)——鏈表詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

鏈表

前言

new一個(gè)奶黃包:沒(méi)關(guān)系,這條路我陪你走到底

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

認(rèn)識(shí)鏈表

單鏈表結(jié)構(gòu)圖

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

帶頭單循環(huán)鏈表結(jié)構(gòu)圖

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

雙向循環(huán)鏈表結(jié)構(gòu)圖

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

帶頭雙向循環(huán)鏈表結(jié)構(gòu)圖

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

鏈表特點(diǎn)

  • 單鏈表在內(nèi)存中,并不是連續(xù)存儲(chǔ)的(邏輯上連續(xù))。

  • 不支持隨機(jī)訪問(wèn)

  • 插入時(shí)只需要改變指針指向

  • 沒(méi)有容量的概念

  • 可以高效的在任意位置插入&&刪除

  • 緩存利用率低

鏈表實(shí)現(xiàn)(帶頭雙向循環(huán)鏈表實(shí)現(xiàn))

鏈表結(jié)構(gòu)體
typedef int LTDataType;
typedef struct ListNode
{
	LTDataType data;
	struct ListNode* next;
	struct ListNode* prev;
}LTNode;
(1) 新建頭節(jié)點(diǎn)
LTNode* ListInit()//建立頭節(jié)點(diǎn)
{
	LTNode* phead = buyListNode(-1); //建立一個(gè)帶頭節(jié)點(diǎn)
	phead->next = phead;      
	phead->prev = phead;

	return phead;
}
(2) 建立新節(jié)點(diǎn)
LTNode* buyListNode(LTDataType x)//創(chuàng)建內(nèi)存初始化數(shù)據(jù)  
{
	LTNode* newnode = (LTNode*)malloc(sizeof(LTNode)); //
	if (newnode == NULL)
	{
		perror("malloc fail");
		exit(-1);
	}
	// 初始化:注意所對(duì)的結(jié)構(gòu)來(lái)初始化
	newnode->next = NULL;
	newnode->prev = NULL;
	newnode->data = x;
	return newnode;
}

(3)尾部插入節(jié)點(diǎn)
void LTPushBack(LTNode* phead, LTDataType x)
{
	assert(phead);
	LTNode* newnode = buyListNode(x);
	LTNode* tail = phead->prev;
  
	tail->next = newnode;
	newnode->prev = tail;

	newnode->next = phead;
	phead->prev = newnode;
}

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

(4)刪除節(jié)點(diǎn)
void LTPopBack(LTNode* phead)
{
	assert(phead);
	LTNode* tail = phead->prev;  //記錄上一個(gè)節(jié)點(diǎn)
	LTNode* tailmove =tail->prev;  //記錄上一個(gè)節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)
  
	tailmove->next = phead;    
	phead->prev = tailmove;
  
	free(tail);
}

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

(5)頭部插入節(jié)點(diǎn)
void LTPushFront(LTNode* phead, LTDataType x)
{
	assert(phead);
	LTNode* newnode = buyListNode(x); 
	LTNode* first = phead->next;

	newnode->next = first;
	first->prev = newnode;

	first->next = phead;
	phead->prev = first;
}

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

(6) 頭刪節(jié)點(diǎn)
void LTPopFront(LTNode* phead)
{
	assert(phead);  //判斷是否有頭節(jié)點(diǎn)
	assert(phead->next != NULL);  //判斷第一個(gè)節(jié)點(diǎn)是否存在
	LTNode* tail = phead->next;
	LTNode* tailmove = tail->next;

	tailmove->prev = phead;
	phead->next = tailmove;

	tailmove->next = phead;
	phead->prev = tailmove;
	free(tail);
}

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

(7) 尋找節(jié)點(diǎn)
LTNode* LTFind(LTNode* phead, LTDataType x)
{
	assert(phead);
	LTNode* cur = phead->next;
	while (cur != phead)
	{
		if (cur->data == x)
		{
			//printf("找到了");
			return cur;//返回指針
		}
      cur=cur->next; //每次都走到下一個(gè)節(jié)點(diǎn)直到phead
	}
	//printf("找不到");
	return NULL;
}
(8) pos位置插入節(jié)點(diǎn)
void LTInsert(LTNode* pos, LTDataType x)//頭插尾插都可以調(diào)用這個(gè)函數(shù) 
{
	assert(pos);
	LTNode* newnode = buyListNode(x); //新建一個(gè)節(jié)點(diǎn)
	LTNode* prev = pos->prev;   //記錄pos位置的前一個(gè)節(jié)點(diǎn)

	newnode->next = pos;   //新節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)就是pos
	pos->prev = newnode;   //pos位置節(jié)點(diǎn)prve就鏈接后面

	newnode->prev = prev;
	prev->next = newnode;
}

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法

(9) 刪除pos位置節(jié)點(diǎn)
void LTErase(LTNode* pos)  //刪除節(jié)點(diǎn)
{
	assert(pos);
	LTNode* prve = pos->prev;
	LTNode* next = pos->next;

	prve->next = next;
	next->prev = prve;

	free(pos);
}

數(shù)據(jù)結(jié)構(gòu)——鏈表詳解,數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),c++,算法文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-655496.html

(10) 打印鏈表
void LTPrint(LTNode* phead)
{
	assert(phead);
	LTNode* cur = phead->next;
  
	while (cur!= phead)
	{
		printf("-> %d ",cur->data );
		cur = cur->next;
	}
  
}
測(cè)試用例
void test1()
{
	LTNode* ptail = ListInit();
	LTPushBack(ptail, 1);
	LTPushBack(ptail, 3);
	LTPushBack(ptail, 2);
	LTPushBack(ptail, 4);
	LTPushBack(ptail, 5);
	LTPopBack(ptail);
	LTPrint(ptail);
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)——鏈表詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【算法與數(shù)據(jù)結(jié)構(gòu)】鏈表

    【算法與數(shù)據(jù)結(jié)構(gòu)】鏈表

    鏈表是由一串節(jié)點(diǎn)串聯(lián)在一起的,鏈表的每個(gè)節(jié)點(diǎn)存儲(chǔ)兩個(gè)信息:數(shù)據(jù)+下一個(gè)節(jié)點(diǎn)的地址 分清楚兩個(gè)概念:什么是內(nèi)存內(nèi)部,什么是程序內(nèi)部 內(nèi)存內(nèi)部: 信息存儲(chǔ)在內(nèi)存空間里的 程序內(nèi)部: 通過(guò)什么信息,去操作結(jié)構(gòu) 如果想操作鏈表的話,我們依靠的是程序內(nèi)部的信息,

    2024年02月03日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)——鏈表詳解

    數(shù)據(jù)結(jié)構(gòu)——鏈表詳解

    new一個(gè)奶黃包:沒(méi)關(guān)系,這條路我陪你走到底 單鏈表結(jié)構(gòu)圖 帶頭單循環(huán)鏈表結(jié)構(gòu)圖 雙向循環(huán)鏈表結(jié)構(gòu)圖 帶頭雙向循環(huán)鏈表結(jié)構(gòu)圖 鏈表特點(diǎn) 單鏈表在內(nèi)存中,并不是連續(xù)存儲(chǔ)的(邏輯上連續(xù))。 不支持隨機(jī)訪問(wèn) 插入時(shí)只需要改變指針指向 沒(méi)有容量的概念 可以高效的在任意

    2024年02月12日
    瀏覽(21)
  • [數(shù)據(jù)結(jié)構(gòu)]——鏈表詳解

    [數(shù)據(jù)結(jié)構(gòu)]——鏈表詳解

    1.什么是鏈表?鏈表的概念及結(jié)構(gòu) 鏈表是一種 物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、非順序 的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的 邏輯順序 是通過(guò)鏈表中的 指針鏈接 次序?qū)崿F(xiàn)的。 注意: 1.鏈?zhǔn)浇Y(jié)構(gòu)在邏輯上是連續(xù)的,但在物理上不一定連續(xù) 2.現(xiàn)實(shí)中的結(jié)點(diǎn)一般都是從堆上申請(qǐng)出來(lái)的 3.從堆上申請(qǐng)的

    2024年02月09日
    瀏覽(19)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表詳解

    【數(shù)據(jù)結(jié)構(gòu)】鏈表詳解

    ??個(gè)人主頁(yè):fighting小澤 ??作者簡(jiǎn)介:目前正在學(xué)習(xí)C語(yǔ)言和數(shù)據(jù)結(jié)構(gòu) ??博客專欄:數(shù)據(jù)結(jié)構(gòu) ???歡迎關(guān)注:評(píng)論????點(diǎn)贊????留言???? 在前面我們已經(jīng)學(xué)習(xí)過(guò)了有關(guān)順序表的知識(shí),但是我們知道順序表是存在著一些問(wèn)題的 問(wèn)題: 中間/頭部的插入刪除,時(shí)間復(fù)雜度

    2024年02月03日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表 詳解

    【數(shù)據(jù)結(jié)構(gòu)】鏈表 詳解

    我們不廢話,直入正題。 什么是鏈表? 來(lái)看看百度怎么說(shuō): 鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。每個(gè)結(jié)點(diǎn)包

    2023年04月19日
    瀏覽(14)
  • 02-鏈表 (數(shù)據(jù)結(jié)構(gòu)和算法)

    3.1 鏈表的基本概念 前面我們?cè)趯W(xué)習(xí)順序表時(shí),線性表的順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn)是邏輯關(guān)系上相鄰的兩個(gè)數(shù)據(jù)元素在物理位置上也是相鄰的。我們會(huì)發(fā)現(xiàn)雖然順序表的查詢很快,時(shí)間復(fù)雜度為O(1),但是增刪的效率是比較低的,因?yàn)槊恳淮卧鰟h操作都伴隨著大量的數(shù)據(jù)元素移動(dòng)。為

    2024年02月16日
    瀏覽(26)
  • Python數(shù)據(jù)結(jié)構(gòu)與算法-數(shù)據(jù)結(jié)構(gòu)(列表、棧、隊(duì)列、鏈表)

    Python數(shù)據(jù)結(jié)構(gòu)與算法-數(shù)據(jù)結(jié)構(gòu)(列表、棧、隊(duì)列、鏈表)

    數(shù)據(jù)結(jié)構(gòu)是指相互之間存在這一種或者多種關(guān)系的數(shù)據(jù)元素的集合和該集合中元素之間的關(guān)系組成。 簡(jiǎn)單來(lái)說(shuō),數(shù)據(jù)結(jié)構(gòu)就是設(shè)計(jì)數(shù)據(jù)以何種方式組織并存儲(chǔ)在計(jì)算機(jī)中。 比如:列表、集合與字典等都是一種數(shù)據(jù)結(jié)構(gòu)。 N.Wirth:“程序=數(shù)據(jù)結(jié)構(gòu)+算法” 數(shù)據(jù)結(jié)構(gòu)按照其 邏輯結(jié)

    2024年02月08日
    瀏覽(36)
  • 數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_雙向鏈表

    數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_雙向鏈表

    數(shù)據(jù)結(jié)構(gòu)入門 — 雙向鏈表詳解 博客主頁(yè)鏈接:https://blog.csdn.net/m0_74014525 關(guān)注博主,后期持續(xù)更新系列文章 文章末尾有源碼 *****感謝觀看,希望對(duì)你有所幫助***** 第一篇:數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_單鏈表 第二篇:數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_雙向鏈表 第三篇:數(shù)據(jù)結(jié)構(gòu)入門

    2024年02月11日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu):詳解【鏈表】的實(shí)現(xiàn)(單向鏈表+雙向鏈表)

    數(shù)據(jù)結(jié)構(gòu):詳解【鏈表】的實(shí)現(xiàn)(單向鏈表+雙向鏈表)

    1.順序表的問(wèn)題和思考 問(wèn)題: 中間/頭部的插入刪除,時(shí)間復(fù)雜度為O(N)。 增容需要申請(qǐng)新空間,拷貝數(shù)據(jù),釋放舊空間,會(huì)有不小的消耗。 增容一般是呈2倍的增長(zhǎng),勢(shì)必會(huì)有一定的空間浪費(fèi)。例如當(dāng)前容量為100,滿了以后增容到200,我們?cè)倮^續(xù)插入了5個(gè)數(shù)據(jù),后面沒(méi)有數(shù)據(jù)

    2024年03月26日
    瀏覽(36)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】奇偶鏈表

    【數(shù)據(jù)結(jié)構(gòu)和算法】奇偶鏈表

    Java基礎(chǔ)合集 數(shù)據(jù)結(jié)構(gòu)與算法合集 設(shè)計(jì)模式合集 多線程合集 分布式合集 ES合集 其他系列文章導(dǎo)航 文章目錄 前言 一、題目描述 二、題解 2.1?方法一:分離節(jié)點(diǎn)后合并 三、代碼 3.1?方法一:分離節(jié)點(diǎn)后合并 四、復(fù)雜度分析 4.1?方法一:分離節(jié)點(diǎn)后合并 這是力扣的 328 題,難

    2024年01月20日
    瀏覽(36)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包