C++帶頭雙向循環(huán)鏈表超詳細(xì)解析
上期我們講完了無(wú)頭單向非循環(huán)鏈表,這期我們接著來(lái)講鏈表中結(jié)構(gòu)最復(fù)雜的帶頭雙向循環(huán)鏈表!
本期主要內(nèi)容:
?? 什么是帶頭雙向循環(huán)鏈表?
?? 帶頭雙向循環(huán)鏈表常用接口實(shí)現(xiàn)!
?? 順序表和鏈表的區(qū)別和聯(lián)系!
什么是帶頭雙向循環(huán)鏈表
什么是帶頭?雙向?循環(huán)?(帶頭雙向循環(huán)鏈表)
帶頭:代表鏈表存在一個(gè)哨兵位節(jié)點(diǎn),也就是頭節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)不存放任何的有效數(shù)據(jù)!
雙向:每個(gè)節(jié)點(diǎn)都有兩個(gè)指針,分別指向它的前一個(gè)節(jié)點(diǎn)和后一個(gè)節(jié)點(diǎn)!
循環(huán):最后一個(gè)節(jié)點(diǎn)next不再指向NULL指向的是哨兵位節(jié)點(diǎn),哨兵位節(jié)點(diǎn)prev指向的是最后一個(gè)節(jié)點(diǎn)!(如果是單項(xiàng)鏈表的話哨兵位不指向最后一個(gè)節(jié)點(diǎn)!)

帶頭雙向循環(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ì)帶來(lái)很多優(yōu)勢(shì),實(shí)現(xiàn)反而簡(jiǎn)單了,后面我們代碼實(shí)現(xiàn)了就知道了!
帶頭雙向循環(huán)鏈表常用接口實(shí)現(xiàn)
?? 搭建帶頭雙向循環(huán)鏈表的結(jié)構(gòu)!

?? 帶頭雙向循環(huán)鏈表的初始化并創(chuàng)建新節(jié)點(diǎn)!

?? 頭部插入節(jié)點(diǎn)!

?? 尾部插入節(jié)點(diǎn)!

?? 頭部刪除節(jié)點(diǎn)!

?? 尾部刪除節(jié)點(diǎn)!

?? 在pos節(jié)點(diǎn)前插入節(jié)點(diǎn)!
我們首先要找到pos節(jié)點(diǎn)的地址!
ListNode* ListFind(ListNode* phead, LTDataType x)
{
assert(phead);
ListNode* cur = phead->next;
while (cur != phead)
{
if (cur->data == x)
{
return cur;
}
cur = cur->next;
}
return NULL;
}
?? 刪除指定pos節(jié)點(diǎn)!
看了上面的那么多的圖解,相信刪除指定節(jié)點(diǎn)對(duì)你來(lái)說(shuō)也很簡(jiǎn)單吧!我就直接上代碼了!
void ListErase(ListNode* pos)
{
assert(pos);
ListNode* prev = pos->prev;
ListNode* next = pos->next;
prev->next = next;
next->prev = prev;
free(pos);
pos = NULL;
}?? 最后別忘記銷(xiāo)毀鏈表哦!
void ListDestory(ListNode* phead)
{
ListNode* cur = phead->next;
while (cur != phead)
{
ListNode* next = cur->next;
free(cur);
cur = next;
}
free(phead);
phead = NULL;
}其實(shí)很多小伙伴一看到數(shù)據(jù)結(jié)構(gòu)就頭疼,但是我想說(shuō),不要嫌畫(huà)圖麻煩,一定要多畫(huà)圖,這樣更有利于我們實(shí)現(xiàn)代碼,靠腦袋空想是想不出來(lái)的!
最后愛(ài)打籃球的程序猿想送小伙伴們一句話:天再高又怎樣,踮起腳尖就更接近陽(yáng)光!
gitee(碼云):Mercury. (zzwlwp) - Gitee.com
到此這篇關(guān)于C++帶頭雙向循環(huán)鏈表超詳細(xì)解析的文章就介紹到這了,更多相關(guān)C++ 帶頭雙向循環(huán)鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明
下面小編就為大家?guī)?lái)一篇對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
Linux編程實(shí)現(xiàn)制作文件的ed2k鏈
這篇文章主要介紹了Linux編程實(shí)現(xiàn)制作文件的ed2k鏈的相關(guān)資料,需要的朋友可以參考下2015-03-03
C++超詳細(xì)講解強(qiáng)制類(lèi)型轉(zhuǎn)換的用法
在C++語(yǔ)言中新增了四個(gè)關(guān)鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。這四個(gè)關(guān)鍵字都是用于類(lèi)型轉(zhuǎn)換的,類(lèi)型轉(zhuǎn)換(type?cast),是高級(jí)語(yǔ)言的一個(gè)基本語(yǔ)法。它被實(shí)現(xiàn)為一個(gè)特殊的運(yùn)算符,以小括號(hào)內(nèi)加上類(lèi)型名來(lái)表示,接下來(lái)讓我們一起來(lái)詳細(xì)了解2022-06-06
Qt事件過(guò)濾實(shí)現(xiàn)點(diǎn)擊圖片的放大和縮小
這篇文章主要為大家詳細(xì)介紹了Qt事件過(guò)濾實(shí)現(xiàn)點(diǎn)擊圖片的放大和縮小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
C語(yǔ)言詳解鏈?zhǔn)疥?duì)列與循環(huán)隊(duì)列的實(shí)現(xiàn)
隊(duì)列(Queue)與棧一樣,是一種線性存儲(chǔ)結(jié)構(gòu),它具有如下特點(diǎn):隊(duì)列中的數(shù)據(jù)元素遵循“先進(jìn)先出”(First In First Out)的原則,簡(jiǎn)稱FIFO結(jié)構(gòu)。在隊(duì)尾添加元素,在隊(duì)頭刪除元素,本篇來(lái)講解鏈?zhǔn)疥?duì)列與循環(huán)隊(duì)列的實(shí)現(xiàn)2022-04-04

