《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)系列文章 第三章 循環(huán)鏈表、雙向鏈表
文章目錄
- 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
- 前言
- 一、循環(huán)鏈表
- (一)定義
- (二)尾指針
- 二、雙向鏈表
- (一)定義
- (二)代碼
- 總結(jié)
前言
提示:本系列文章均使用Visual Studio 2019編程,編程語言為c語言。
一、循環(huán)鏈表
(一)定義
將單鏈表的終端結(jié)點(diǎn)的指針端由空指針改為指向頭結(jié)點(diǎn),這樣就讓整個(gè)單鏈表形成一個(gè)循環(huán),這時(shí)頭尾相連的單鏈表就稱為單循環(huán)鏈表,即循環(huán)鏈表,下圖的head,即為頭指針。
將循環(huán)鏈表和單鏈表相比較,其實(shí)就在循環(huán)的判斷條件上差別,單鏈表判斷是否為空(p!=null 或 p->null!=null),循環(huán)鏈表是否等于頭結(jié)點(diǎn)(p!=head 或 p->next!=head)。
(二)尾指針
事實(shí)上我們不用頭指針,而改用指向終端結(jié)點(diǎn)的尾指針來表示循環(huán)鏈表,這樣就使查找開始結(jié)點(diǎn)和終端結(jié)點(diǎn)就很方便。
我們通過一張圖,進(jìn)一步了解其尾指針的作用:
二、雙向鏈表
(一)定義
在單鏈表結(jié)構(gòu)中,結(jié)點(diǎn)只有一個(gè)指向后繼的指針域next,若要查找某個(gè)結(jié)點(diǎn)只能順著單鏈表尋找它的后繼結(jié)點(diǎn),為了能夠高效地查找一個(gè)結(jié)點(diǎn),我們只需從頭指針出發(fā)查找其前驅(qū),即我們?cè)黾右粋€(gè)指向其直接前驅(qū)的指針域prior,這樣我們就構(gòu)成了一個(gè)雙向鏈表。其中第一個(gè)結(jié)點(diǎn)的前趨結(jié)點(diǎn)為NULL,最后一個(gè)結(jié)點(diǎn)的后繼結(jié)點(diǎn)也為NULL。
即,數(shù)據(jù)域?yàn)閐ata數(shù)據(jù),存儲(chǔ)一個(gè)數(shù)據(jù)元素的信息;prior指針域?yàn)榍膀?qū)指針域,用于存儲(chǔ)其直接前驅(qū)存儲(chǔ)地址的信息;next指針域?yàn)楹罄^指針域,用于存儲(chǔ)其后繼存儲(chǔ)地址的信息。
(二)代碼
分別定義數(shù)據(jù)域,前驅(qū)指針域以及后繼指針域。
若要將新結(jié)點(diǎn)s(x為其值)插入到雙向鏈表中兩個(gè)結(jié)點(diǎn)o、p之間,即在p結(jié)點(diǎn)之前插入結(jié)點(diǎn)s,首先我們應(yīng)該將要插入的新結(jié)點(diǎn)s的前驅(qū)指針域指向結(jié)點(diǎn)p的前一個(gè)結(jié)點(diǎn)o,將結(jié)點(diǎn)o的后繼指針域指向要插入的新結(jié)點(diǎn)s,然后將結(jié)點(diǎn)s的后繼指針域指向p結(jié)點(diǎn),并將結(jié)點(diǎn)p的前驅(qū)指針域指向結(jié)點(diǎn)s。
若要?jiǎng)h除表中的結(jié)點(diǎn)p,我們首先應(yīng)該將結(jié)點(diǎn)p的前一個(gè)結(jié)點(diǎn)的后繼指針域指向結(jié)點(diǎn)p的后繼指針域,將結(jié)點(diǎn)p后一個(gè)結(jié)點(diǎn)的前驅(qū)指針域指向結(jié)點(diǎn)p的后繼指針域,然后釋放結(jié)點(diǎn)p的空間。
總結(jié)
以上就是本次的筆記內(nèi)容,本文介紹了循環(huán)鏈表、雙向鏈表的各項(xiàng)操作,筆記若有錯(cuò)誤,還望指出!!!
附:在下一文章會(huì)介紹棧的各項(xiàng)操作,持續(xù)更新ing……
總結(jié)
以上是生活随笔為你收集整理的《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《数据结构》c语言版学习笔记——单链表结
- 下一篇: 微信小程序开发与应用 第一章 微信小程序