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

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

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

前言

數(shù)據(jù)結(jié)構(gòu)入門 — 雙向鏈表詳解
博客主頁鏈接: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)入門 — 鏈表詳解_循環(huán)鏈表



什么是雙向鏈表

雙向鏈表(Doubly Linked List)是一種鏈表數(shù)據(jù)結(jié)構(gòu),它的每個(gè)節(jié)點(diǎn)都含有兩個(gè)指針,一個(gè)指向前一個(gè)節(jié)點(diǎn),一個(gè)指向后一個(gè)節(jié)點(diǎn)。相比較于單向鏈表,雙向鏈表可以雙向遍歷,即可以從頭到尾或從尾到頭遍歷鏈表。在雙向鏈表中,每個(gè)節(jié)點(diǎn)包含兩個(gè)指針域和一個(gè)數(shù)據(jù)域。其中,一個(gè)指針指向前驅(qū)節(jié)點(diǎn),另一個(gè)指針指向后繼節(jié)點(diǎn)。這兩個(gè)指針使得雙向鏈表的插入、刪除等操作不需要像單向鏈表那樣需要遍歷整個(gè)鏈表來尋找前驅(qū)節(jié)點(diǎn),提高了鏈表的操作效率。

概念與結(jié)構(gòu)(圖文)

數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_雙向鏈表,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言,開發(fā)語言,c++,visual studio
帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨(dú)存儲(chǔ)數(shù)據(jù)。實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個(gè)結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會(huì)發(fā)現(xiàn)結(jié)構(gòu)會(huì)帶來很多優(yōu)勢(shì),實(shí)現(xiàn)反而簡單了,后面我們代碼實(shí)現(xiàn)了就知道了。

雙向鏈表與單鏈表的區(qū)別

雙向鏈表和單鏈表是兩種不同的鏈表結(jié)構(gòu)。

單向鏈表是一種鏈表,在每個(gè)節(jié)點(diǎn)中包含指向下一個(gè)節(jié)點(diǎn)的指針。這意味著在單向鏈表中,節(jié)點(diǎn)只能從頭開始遍歷到尾部。在單向鏈表中,每個(gè)節(jié)點(diǎn)只存儲(chǔ)指向下一個(gè)節(jié)點(diǎn)的指針,而不存儲(chǔ)指向前一個(gè)節(jié)點(diǎn)的指針。

雙向鏈表是一種鏈表,在每個(gè)節(jié)點(diǎn)中包含指向下一個(gè)節(jié)點(diǎn)和前一個(gè)節(jié)點(diǎn)的指針。這意味著在雙向鏈表中,節(jié)點(diǎn)可以被從頭到尾或從尾到頭遍歷。在雙向鏈表中,每個(gè)節(jié)點(diǎn)存儲(chǔ)指向前一個(gè)節(jié)點(diǎn)和下一個(gè)節(jié)點(diǎn)的指針。

因此,雙向鏈表可以更方便地進(jìn)行雙向遍歷,但是需要更多的內(nèi)存空間來存儲(chǔ)每個(gè)節(jié)點(diǎn)的兩個(gè)指針。相比之下,在單向鏈表中,只需要一個(gè)指針來指向下一個(gè)節(jié)點(diǎn),因此內(nèi)存占用量更小。

帶頭雙向循環(huán)鏈表接口實(shí)現(xiàn)(代碼演示)

帶頭+雙向+循環(huán)鏈表增刪查改實(shí)現(xiàn)

1. 動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)

typedef int STDataType;
typedef struct ListNode
{
	struct ListNode* prev;
	struct ListNode* next;
	STDataType data;
}LTNode;

雙向鏈表打印

void LTPrint(LTNode* phead)
{
	assert(phead);
	printf("phead<->");
	//跳過哨兵位
	LTNode* cur = phead->next;
	while (cur != phead)
	{
		printf("%d<->", cur->data);
		cur = cur->next;
	}
	printf("\n");
}

增刪查改接口

根據(jù)增刪查改順序編排
雙向鏈表頭插:

//頭插
void  LTPushFront(LTNode* phead, STDataType x)
{
	assert(phead);
	LTNode* newnode = BuyLTNode(x);
	LTNode* first = phead->next;
	newnode->next = first;
	first->prev = newnode;
	phead->next = newnode;
	newnode->prev = phead;

}

雙向鏈表尾插:

//尾插
void LTPushBack(LTNode* phead, STDataType x)
{
	assert(phead);
	
	LTNode* newnode = BuyLTNode(x);
	//找到最后一個(gè)
	LTNode* tail = phead->prev;
	
	
	newnode->prev = tail;
	tail->next = newnode;
	

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

雙向鏈表頭刪:

//頭刪
void LTPopFront(LTNode* phead)
{
	assert(phead);
	assert(phead->next != phead);
	LTNode* first = phead->next;
	LTNode* second = first->next;
	free(first);
	phead->next = second;
	second->prev = phead;

}

雙向鏈表尾刪:

//尾刪
void LTPopBack(LTNode* phead)
{
	assert(phead);
	assert(phead->next != phead);
	LTNode* tail = phead->prev;
	LTNode* tailprev = tail->prev;

	free(tail);
	
	phead->prev = tailprev;
	tailprev->next = phead;

}

查找:

LTNode* LTFind(LTNode* phead, STDataType x)
{
	assert(phead);
	LTNode* cur = phead->next;
	while (cur != phead)
	{
		if (cur->data == x)
		{
			return cur;
		}
		cur = cur->next;
	}

	return NULL;
}

在指點(diǎn)位置插入:

void LTInsert(LTNode* pos, STDataType x)
{
	LTNode* newnode = BuyLTNode(x);
	LTNode* posprev = pos->prev;
	newnode->next = pos;
	pos->prev = newnode;
	posprev->next = newnode;
	newnode->prev = posprev;

}

在指點(diǎn)位置刪除:

// 把pos刪除
void LTErase(LTNode* pos)
{
	LTNode* posprev = pos->prev;
	LTNode* posnext = pos->next;
	free(pos);
	posprev->next = posnext;
	posnext->prev = posprev;
}

雙向鏈表銷毀

void LTDestory(LTNode* phead)
{
	LTNode* cur = phead->next;
	while (cur != phead)
	{
		LTNode* next = cur->next;
		free(cur);
		cur = next;
	}

	free(phead);
	phead = NULL;
}

五、所有文件代碼

1. Gitee鏈接

***查看所有代碼***
點(diǎn)擊右邊藍(lán)色文字 DuckBro Gitee 代碼倉庫


總結(jié)

帶頭雙向循環(huán)鏈表的基本概念和常見操作。帶頭雙向循環(huán)鏈表是一種特殊的雙向鏈表,它多了一個(gè)頭節(jié)點(diǎn)和一個(gè)尾節(jié)點(diǎn),并且首尾相連形成一個(gè)環(huán)。

這樣可以實(shí)現(xiàn)循環(huán)遍歷鏈表。在帶頭雙向循環(huán)鏈表中,插入、刪除節(jié)點(diǎn)等操作都有特殊處理方式。帶頭雙向循環(huán)鏈表在實(shí)際應(yīng)用中比較常見,如操作系統(tǒng)中的進(jìn)程管理、音樂播放器中的播放列表等。


如這篇博客對(duì)大家有幫助的話,希望 三連 支持一下 ?。。?如果有錯(cuò)誤感謝大佬的斧正 如有 其他見解發(fā)到評(píng)論區(qū),一起學(xué)習(xí) 一起進(jìn)步。文章來源地址http://www.zghlxwxcb.cn/news/detail-672436.html

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

本文來自互聯(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)文章

  • 雙向鏈表--C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)

    雙向鏈表--C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)

    本期帶大家一起用C語言實(shí)現(xiàn)雙向鏈表?????? 鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的;簡單來說,線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)生成的表,稱作“鏈表”。 每個(gè)元素本身由兩部分組成: 1、本身的信息,稱

    2024年02月04日
    瀏覽(29)
  • Go語言數(shù)據(jù)結(jié)構(gòu)(一)雙向鏈表

    Go語言中l(wèi)ist容器定義在\\\"container/list\\\"包中,實(shí)現(xiàn)了一個(gè)雙向鏈表。本文第一部分總結(jié)源碼包中的方法,第二部分展示使用list包的常見示例用法以及刷題時(shí)的用法。 食用指南:先看第二部分的常用示例用法然后再用到時(shí)在第一部分找對(duì)應(yīng)的方法。 更多內(nèi)容以及其他Go常用數(shù)據(jù)結(jié)

    2024年01月19日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)——雙向鏈表(C語言版)

    上一章: 數(shù)據(jù)結(jié)構(gòu)——單向鏈表(C語言版)-CSDN博客 目錄 什么是雙向鏈表? 雙向鏈表的節(jié)點(diǎn)結(jié)構(gòu) 雙向鏈表的基本操作 完整的雙向鏈表示例 總結(jié) 什么是雙向鏈表? 雙向鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),它由一系列節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含兩個(gè)指針:一個(gè)指向前一個(gè)節(jié)點(diǎn),一個(gè)

    2024年03月26日
    瀏覽(14)
  • 【數(shù)據(jù)結(jié)構(gòu)】動(dòng)圖詳解雙向鏈表

    【數(shù)據(jù)結(jié)構(gòu)】動(dòng)圖詳解雙向鏈表

    目錄 1.單向鏈表的劣勢(shì) 2.帶頭雙向循環(huán)鏈表 ? ? ? ? 1.邏輯結(jié)構(gòu) ? ? ? ?2.結(jié)點(diǎn)的代碼實(shí)現(xiàn) 3.雙向鏈表接口的實(shí)現(xiàn) ????????1.接口1---初始化 ????????2.接口2,3---頭插,尾插 ????????3. 接口4,5---頭刪,尾刪 ????????3. 接口6---查找 ?????????4. 接口7,8--插入,

    2024年01月23日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)之雙向鏈表詳解

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

    ??博主CSDN主頁:小源_?? ???個(gè)人專欄:《數(shù)據(jù)結(jié)構(gòu)》??? ??努力追逐大佬們的步伐~ 上一篇文章中我們重點(diǎn)講解了無頭單向非循環(huán)鏈表的模擬實(shí)現(xiàn),現(xiàn)在我們來講解LinkedList(無頭雙向鏈表實(shí)現(xiàn) )的模擬實(shí)現(xiàn)。 本章重點(diǎn): 本文著重講解了LinkedList(無頭雙向單鏈表)的實(shí)現(xiàn)

    2024年02月04日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】—C語言實(shí)現(xiàn)雙向鏈表(超詳細(xì)!)

    【數(shù)據(jù)結(jié)構(gòu)】—C語言實(shí)現(xiàn)雙向鏈表(超詳細(xì)!)

    ??????????????????????????????? ??? ? 食用指南:本文在有C基礎(chǔ)的情況下食用更佳 ? ????????????????????????????? ??? ? ?? 這就不得不推薦此專欄了:C語言 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 雙向鏈表 前 置知識(shí) :單鏈表 ? ? ?

    2024年02月13日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)分享之雙向鏈表詳解

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)分享之雙向鏈表詳解

    ? ? ??博主CSDN:杭電碼農(nóng)-NEO???????? ? ? ? ?專欄分類:數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)分享(持續(xù)更新中??)??????? ? ? ? 我們上一期說到,兩鏈表中有兩個(gè)最常用的結(jié)構(gòu),一個(gè)是最簡單的無頭不循環(huán)單向鏈表,還有一個(gè)就是 結(jié)構(gòu)相對(duì)比較復(fù)雜的帶頭雙向循環(huán)鏈表 ,我們這一章節(jié)就來

    2024年02月04日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】C語言實(shí)現(xiàn)雙向鏈表(帶頭結(jié)點(diǎn)、循環(huán))

    【數(shù)據(jù)結(jié)構(gòu)】C語言實(shí)現(xiàn)雙向鏈表(帶頭結(jié)點(diǎn)、循環(huán))

    結(jié)點(diǎn)定義: 接口定義: 我們將申請(qǐng)結(jié)點(diǎn)的代碼封裝成函數(shù),方便后續(xù)使用 由于是帶頭結(jié)點(diǎn)的雙向鏈表,因此在使用鏈表前,我們需要對(duì)鏈表進(jìn)行初始化。 遍歷鏈表,值得說的是,帶頭結(jié)點(diǎn)的雙向鏈表的循環(huán)結(jié)束條件是 cur != phead 尾插時(shí),需要先找到尾結(jié)點(diǎn),然后將新結(jié)點(diǎn)插

    2024年02月03日
    瀏覽(95)
  • 數(shù)據(jù)結(jié)構(gòu) - 鏈表詳解(二)—— 帶頭雙向循環(huán)鏈表

    數(shù)據(jù)結(jié)構(gòu) - 鏈表詳解(二)—— 帶頭雙向循環(huán)鏈表

    鏈表的結(jié)構(gòu)一共有 八種 :帶頭單向循環(huán)鏈表、帶頭單向非循環(huán)鏈表、帶頭雙向循環(huán)鏈表、帶頭雙向非循環(huán)鏈表、無頭單向循環(huán)鏈表、無頭單向非循環(huán)鏈表、無頭雙向循環(huán)鏈表、無頭雙向非循環(huán)鏈表。 今天我們來詳解帶頭雙向循環(huán)鏈表 帶頭雙向循環(huán)鏈表是一種數(shù)據(jù)結(jié)構(gòu),它通

    2024年04月26日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu):線性表之-循環(huán)雙向鏈表(萬字詳解)

    數(shù)據(jù)結(jié)構(gòu):線性表之-循環(huán)雙向鏈表(萬字詳解)

    目錄 基本概念 1,什么是雙向鏈表 2,與單向鏈表的區(qū)別 雙向鏈表詳解 功能展示: 1. 定義鏈表 2,創(chuàng)建雙向鏈表 3,初始化鏈表 4,尾插 5,頭插 6,尾刪 判斷鏈表是否被刪空 尾刪代碼 7,頭刪 8,pos位置之前插入 優(yōu)化后的頭插 優(yōu)化后的尾插 9,刪除pos位置的節(jié)點(diǎn) 優(yōu)化后的尾刪 優(yōu)

    2024年02月09日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包