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

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

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

前言:

鏈表有很多種,上一章結(jié),我復(fù)盤了單鏈表,這一章節(jié),主要針對雙鏈表的知識點(diǎn)進(jìn)行,整理復(fù)盤,如果將鏈表分類的話,有很多種,我就學(xué)習(xí)的方向考察的重點(diǎn),主要針對這兩種鏈表進(jìn)行整理。

帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨(dú)存儲數(shù)據(jù)。實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個(gè)結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會發(fā)現(xiàn)結(jié)構(gòu)會帶來很多優(yōu)勢,實(shí)現(xiàn)反而簡單了,后面我們代碼實(shí)現(xiàn)了就知道了。帶頭雙向循環(huán)鏈表如下圖所示。?

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


目錄

1. 帶頭雙向鏈表的實(shí)現(xiàn)

?1.1封裝鏈表節(jié)點(diǎn)結(jié)構(gòu)體

1.2建立新的節(jié)點(diǎn)?

?1.3初始化鏈表

1.4尾插函數(shù)?

?1.5尾刪

?1.6頭插

1.7頭刪

1.8顯示

1.9銷毀

1.10查找

1.11插入

1.12擦除

1.13判空


?

1. 帶頭雙向鏈表的實(shí)現(xiàn)

?1.1封裝鏈表節(jié)點(diǎn)結(jié)構(gòu)體

typedef int LDataType;

typedef struct ListNode
{
	LDataType data;//自身數(shù)據(jù)
	struct ListNode* prev;指向前一個(gè)節(jié)點(diǎn)指針
	struct ListNode* next;指向后一個(gè)節(jié)點(diǎn)指針

}LTNode;

1.2建立新的節(jié)點(diǎn)?

?鏈表的增刪查改都會有新的節(jié)點(diǎn),所以我們可以封裝一個(gè)建立節(jié)點(diǎn)的函數(shù),具體代碼如下:

LTNode* BuyNode(LDataType x)
{
	LTNode* temp = (LTNode*)malloc(sizeof(LTNode));
	if (temp == NULL)
	{
		perror("malloc:fail");
		exit(-1);
	}
	temp->data = x;
	temp->next = NULL;
	temp->prev = NULL;


	return temp;
}

?1.3初始化鏈表

?因?yàn)槭菐ь^節(jié)點(diǎn),初始化會改變節(jié)點(diǎn)指向,如果按照單鏈表的操作習(xí)慣,我們可能穿指針變量的地址,用二級指針接收,但是也沒必要,我們可以讓函數(shù)返回的類型,為指針,具體代碼如下:

LTNode* ListInit()
{
	LTNode* phead = BuyNode(-1);
	phead->next = phead;
	phead->prev = phead;
	return phead;
}

1.4尾插函數(shù)?

?因?yàn)轭^結(jié)點(diǎn)的prev指向tail,tail的next節(jié)點(diǎn)指向head所以我們只要改變節(jié)點(diǎn)指向就可以完成尾插,如圖所示:

具體代碼如下:?

void PushBack(LTNode* pa, LDataType x)
{
	assert(pa);
	LTNode* newnode = BuyNode(x);
	LTNode* tail = pa->prev;
	tail->next = newnode;
	newnode->prev = tail;
	pa->prev = newnode;
	newnode->next = pa;
	
}

?1.5尾刪

?刪掉最后一個(gè)節(jié)點(diǎn),并改變節(jié)點(diǎn)指向

具體代碼如下:

void PopBack(LTNode* pa)
{
	assert(pa);
	LTNode* tail = pa->prev;
	LTNode* middle = tail->prev;
	middle->next = pa;
	pa->prev = middle;
	free(tail);
    tail = NULL;

}

?1.6頭插

?

代碼如下:

void PushFront(LTNode* pa, LDataType x)
{
	assert(pa);
	LTNode* newnode = BuyNode(x);
	LTNode* middle = pa->next;
	newnode->next = middle;
	middle->prev = newnode;
	pa->next = newnode;
	newnode->prev = pa;
}

1.7頭刪

?代碼如下

void PopFront(LTNode* pa)
{
	assert(pa);
	LTNode* middle = pa->next;
	LTNode* cur = middle->next;
	pa->next = cur;
	cur->prev = pa;
	free(middle);
  middle = NULL;
}

1.8顯示

?增刪查改之后,需要顯示在終端,所以要有打印顯示函數(shù)

void ListPrint(LTNode* pa)
{
	LTNode* cur = pa->next;
	while (cur != pa) 
	{
		printf("%d<=>", cur->data);
		cur = cur->next;
	}
	printf("NULL\n");
}

1.9銷毀

?在堆上創(chuàng)建的空間,使用完成后,要返還給操作系統(tǒng)。

void ListDestroy(LTNode* pa)
{
	LTNode* cur = pa->next;
	LTNode* prev = NULL;
	while (cur != pa)
	{
		LTNode* prev = cur;
		cur = cur->next;
		free(prev);
	}
	free(pa);
	pa->next = pa->prev = NULL;
}

1.10查找

?查找指定數(shù)值得節(jié)點(diǎn),當(dāng)查找到的時(shí)候返回該數(shù)值得地址,如果沒有查找到則返回空指針。

LTNode* ListFind(LTNode* pa, LDataType x)
{
	assert(pa);
	LTNode* cur = pa->next;
	while (cur != pa)
	{
		if (cur->data != x)
		{
			cur = cur->next;
		}
		else
		{
          return cur;
		}
		
	}
	return NULL;

}

1.11插入

?在當(dāng)前節(jié)點(diǎn)的前一個(gè)位置插入節(jié)點(diǎn)

void ListInsert(LTNode* pa, LTNode* pos, LDataType x)
{
	assert(pa);
	assert(pos);
	LTNode* newnode = BuyNode(x);
	LTNode* prev = pos->prev;

	newnode->next = pos;
	pos->prev = newnode;

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

}

1.12擦除

?將當(dāng)前節(jié)點(diǎn)去除掉。

void ListErase(LTNode* pa, LTNode* pos)
{
	assert(pos);
	LTNode* prev = pos->prev;
	LTNode* next = pos->next;
	prev->next = next;
	next->prev = prev;
	free(pos);
	pos = NULL;

}

1.13判空

如果頭節(jié)點(diǎn)的下個(gè)指向?yàn)樽约哼@個(gè)表達(dá)式為真的話,則返回true 否則返回false。?文章來源地址http://www.zghlxwxcb.cn/news/detail-406385.html

bool LTEmpty(LTNode* pa)
{
	return pa->next == pa;
}

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

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

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

相關(guān)文章

  • 鏈接未來:深入理解鏈表數(shù)據(jù)結(jié)構(gòu)(二.c語言實(shí)現(xiàn)帶頭雙向循環(huán)鏈表)

    鏈接未來:深入理解鏈表數(shù)據(jù)結(jié)構(gòu)(二.c語言實(shí)現(xiàn)帶頭雙向循環(huán)鏈表)

    上篇文章簡述講解了鏈表的基本概念并且實(shí)現(xiàn)了無頭單向不循環(huán)鏈表:鏈接未來:深入理解鏈表數(shù)據(jù)結(jié)構(gòu)(一.c語言實(shí)現(xiàn)無頭單向非循環(huán)鏈表)-CSDN博客 那今天接著給大家?guī)韼ь^雙向循環(huán)鏈表的實(shí)現(xiàn) : 頭文件DoubleList.h:用來基礎(chǔ)準(zhǔn)備(常量定義,typedef),鏈表表的基本框架

    2024年01月16日
    瀏覽(58)
  • 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目——鏈表綜合算法設(shè)計(jì)、帶頭雙向循環(huán)鏈表、插入、顯示、刪除、修改、排序

    數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目——鏈表綜合算法設(shè)計(jì)、帶頭雙向循環(huán)鏈表、插入、顯示、刪除、修改、排序

    ??課程設(shè)計(jì)題目1–鏈表綜合算法設(shè)計(jì) ??一、設(shè)計(jì)內(nèi)容 ??已知簡單的人事信息系統(tǒng)中職工記錄包含職工編號(no)、職工姓名(name)、部門名稱(depname)、職稱(title)和工資數(shù)(salary)等信息(可以增加其他信息),設(shè)計(jì)并完成一個(gè)簡單的人事信息管理系統(tǒng),要求完成但不

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

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

    ????????????????????????Take your time ! ???????????????????????? ??個(gè)人主頁:??????大魔王?????? ??所屬專欄:??魔王的修煉之路–數(shù)據(jù)結(jié)構(gòu)?? 如果你覺得這篇文章對你有幫助,請?jiān)谖恼陆Y(jié)尾處留下你的 點(diǎn)贊 ??和 關(guān)注 ??,支持一

    2024年02月01日
    瀏覽(41)
  • 【數(shù)據(jù)結(jié)構(gòu)】帶頭雙向循環(huán)鏈表

    【數(shù)據(jù)結(jié)構(gòu)】帶頭雙向循環(huán)鏈表

    ??????? 個(gè)人主頁:簡 料 ???? 所屬專欄:C++ ???? 個(gè)人社區(qū):越努力越幸運(yùn)社區(qū) ???? 簡? ? ?? 介: 簡料簡料,簡單有料~在校大學(xué)生一枚,專注C/C++/GO的干貨分享,立志成為您的好幫手 ~ C/C++學(xué)習(xí)路線 (點(diǎn)擊解鎖) ?? C語言階段(已結(jié)束) ?? 數(shù)據(jù)結(jié)構(gòu)與算法(ing) ?

    2024年01月16日
    瀏覽(33)
  • 數(shù)據(jù)結(jié)構(gòu)---帶頭雙向循環(huán)鏈表

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

    什么是雙向帶頭循環(huán)鏈表? 上面簡單的一個(gè)非空 帶頭循環(huán)雙向鏈表邏輯圖 如何定義一個(gè)雙向鏈表? 根據(jù)圖和代碼可以看雙向鏈表就是單鏈表的每個(gè)結(jié)點(diǎn)中,在設(shè)置一個(gè)指向前驅(qū)節(jié)點(diǎn)的指針 簡單認(rèn)識之后,對他進(jìn)行初始化(申請一個(gè)頭節(jié)點(diǎn),讓前驅(qū)和后驅(qū)指針都指向自己) 代碼

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

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

    前言: 鏈表有很多種,上一章結(jié),我復(fù)盤了單鏈表,這一章節(jié),主要針對雙鏈表的知識點(diǎn)進(jìn)行,整理復(fù)盤,如果將鏈表分類的話,有很多種,我就學(xué)習(xí)的方向考察的重點(diǎn),主要針對這兩種鏈表進(jìn)行整理。 帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨(dú)存儲數(shù)據(jù)。實(shí)際中使用

    2023年04月09日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)——帶頭雙向循環(huán)鏈表

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

    在創(chuàng)建帶頭雙向循環(huán)鏈表的節(jié)點(diǎn)中比之前單鏈表節(jié)點(diǎn)的創(chuàng)建多了一個(gè)struct ListNode* prev;結(jié)構(gòu)體指針,目的在與存儲前一個(gè)節(jié)點(diǎn)的地址,便于將整個(gè)鏈表連在一起。 動態(tài)申請內(nèi)存結(jié)點(diǎn),函數(shù)返回的是一個(gè)指針類型,用malloc開辟一個(gè)LTNode大小的空間,并用node指向這個(gè)空間,再判斷

    2024年02月09日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)之帶頭雙向循環(huán)鏈表

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

    目錄 鏈表的分類 帶頭雙向循環(huán)鏈表的實(shí)現(xiàn) 帶頭雙向循環(huán)鏈表的結(jié)構(gòu) 帶頭雙向循環(huán)鏈表的結(jié)構(gòu)示意圖 空鏈表結(jié)構(gòu)示意圖 單結(jié)點(diǎn)鏈表結(jié)構(gòu)示意圖 ?多結(jié)點(diǎn)鏈表結(jié)構(gòu)示意圖 鏈表創(chuàng)建結(jié)點(diǎn) 雙向鏈表初始化 銷毀雙向鏈表 打印雙向鏈表 ?雙向鏈表尾插 尾插函數(shù)測試 雙向鏈表頭插

    2024年02月08日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)_帶頭雙向循環(huán)鏈表

    相較于之前的順序表和單向鏈表,雙向鏈表的邏輯結(jié)構(gòu)稍微復(fù)雜一些,但是在實(shí)現(xiàn)各種接口的時(shí)候是很簡單的。因?yàn)椴挥谜椅?,寫起來會舒服一點(diǎn)。(也可能是因?yàn)樽罱恢痹趯戇@個(gè)的原因) 在實(shí)現(xiàn)接口的時(shí)候,除了沒有找尾,其他的操作和單向鏈表是差不多的,這里就不多

    2024年04月14日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】實(shí)現(xiàn)帶頭雙向循環(huán)鏈表

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

    之前我們已經(jīng)學(xué)習(xí)了單鏈表,有了單鏈表的基礎(chǔ),現(xiàn)在開始學(xué)習(xí)帶頭雙向循環(huán)鏈表~ 結(jié)構(gòu)最復(fù)雜 ,一般用在單獨(dú)存儲數(shù)據(jù)。 實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表 。另外這個(gè)結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會發(fā)現(xiàn) 結(jié)構(gòu)會帶來很多優(yōu)勢 ,實(shí)現(xiàn)反而簡單

    2024年02月10日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包