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

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

