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

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點)

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

一.帶頭雙向鏈表的概念

帶頭雙向循環(huán)鏈表(Doubly Circular Linked List with a Head)是一種鏈表數(shù)據(jù)結構,它具有以下特點:

頭節(jié)點(哨兵位):帶頭雙向循環(huán)鏈表包含一個頭節(jié)點,它位于鏈表的起始位置,并且不存儲實際數(shù)據(jù)。頭節(jié)點的前驅(qū)指針指向尾節(jié)點,頭節(jié)點的后繼指針指向第一個實際數(shù)據(jù)節(jié)點。

循環(huán)連接:尾節(jié)點的后繼指針指向頭節(jié)點,而頭節(jié)點的前驅(qū)指針指向尾節(jié)點,將鏈表形成一個循環(huán)連接的閉環(huán)。這樣可以使鏈表在遍歷時可以無限循環(huán),方便實現(xiàn)循環(huán)操作。

雙向連接:每個節(jié)點都有一個前驅(qū)指針和一個后繼指針,使得節(jié)點可以向前和向后遍歷。前驅(qū)指針指向前一個節(jié)點,后繼指針指向后一個節(jié)點。

總結:帶頭雙向循環(huán)鏈表可以支持在鏈表的任意位置進行插入和刪除操作,并且可以實現(xiàn)正向和反向的循環(huán)遍歷。通過循環(huán)連接的特性,鏈表可以在連續(xù)的循環(huán)中遍歷所有節(jié)點,使得鏈表的操作更加靈活和高效。

二.帶頭雙向循環(huán)鏈表的實現(xiàn)

1.實現(xiàn)框架

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

通過將int定義為LTDataType,可以在代碼中使用LTDataType作為數(shù)據(jù)類型,而不是直接使用int。這樣做的好處有以下幾點:

  1. 可讀性:使用LTDataType作為數(shù)據(jù)類型可以使代碼更具可讀性。LTDataType作為一個自定義的數(shù)據(jù)類型名稱,可以更好地表達代碼中數(shù)據(jù)的含義和用途,提高代碼的可理解性。
  2. 可維護性:將int定義為LTDataType可以方便地在代碼中統(tǒng)一修改數(shù)據(jù)類型。如果將來需要將數(shù)據(jù)類型更改為其他類型,只需修改typedef語句中的定義,而不需要在整個代碼中逐個修改具體的數(shù)據(jù)類型,減少了修改的工作量和出錯的可能性。
  3. 靈活性:通過使用LTDataType,可以在代碼中輕松更改數(shù)據(jù)類型,而不會對代碼的其他部分產(chǎn)生影響。這種抽象化的方式可以使代碼更具通用性,便于在不同的場景中重用。

2.動態(tài)內(nèi)存開辟申請

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
此函數(shù)是關于一個結點動態(tài)申請的實現(xiàn),包含兩個指針域,一個數(shù)據(jù)域。如果分配成功,它會返回指向該內(nèi)存塊起始位置的指針。你可以使用這個指針來訪問和操作所分配的內(nèi)存。如果分配失敗,malloc會返回NULL指針,表示內(nèi)存分配未成功。

3.鏈表的初始化

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
鏈表的初始化就是要創(chuàng)建哨兵位的頭節(jié)點,此頭節(jié)點不存儲有效數(shù)據(jù),并且因一開始不知道指向誰,所以根據(jù)雙向鏈表循環(huán)的特性,就讓該結點的兩個指針自己指向自己。

4.鏈表打印

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
打印鏈表就是,遍歷鏈表的每一個結點的數(shù)據(jù)域,開始時用assert斷言傳過來的結點地址是否為NULL。接著cur用phead->next賦值的原因是,phead傳過來的是哨兵位的頭節(jié)點,它的下一位才是鏈表真正的頭節(jié)點(有數(shù)據(jù)域),接著遍歷鏈表,當cur指針回到哨兵位時,遍歷結束。

5. 釋放鏈表所申請的動態(tài)內(nèi)存空間

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
在動態(tài)內(nèi)存使用完后,需要把這部分內(nèi)存的使用權限還給操作系統(tǒng),否則會造成內(nèi)存泄漏。將頭節(jié)點的下一個節(jié)點賦值給cur,讓cur遍歷鏈表一遍,當cur遍歷完成到phead頭節(jié)點的時候,釋放結束,退出循環(huán)。

6.判斷鏈表是否為空。

在上面的釋放動態(tài)內(nèi)存函數(shù)中用到了另外一個函數(shù)LTEmpty,這個函數(shù)的作用是用來判斷鏈表是否只有哨兵位,空鏈表的話是不能進行釋放的。為此,引用了布爾值,如果為空則返回true,不空則返回false。

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

7.鏈表尾部插入節(jié)點

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
首先創(chuàng)建一個指針用于存儲最后一個節(jié)點,防止尾插時找不到,之后將鏈表與新節(jié)點鏈接起來就可以了。

測試用例:

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
尾插幾個數(shù)據(jù)之后,打印出來,最后將內(nèi)存返回個操作系統(tǒng),釋放哨兵位,防止內(nèi)存泄露。
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
這是測試打印出來的數(shù)據(jù)。

8.鏈表頭部插入節(jié)點

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
首先創(chuàng)建一個指針用于存儲第一個節(jié)點,防止尾插時找不到,之后將鏈表與新節(jié)點鏈接起來就可以了。

測試用例:
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
插入幾個數(shù)據(jù)之后,打印出來,最后將內(nèi)存返回個操作系統(tǒng),釋放哨兵位,防止內(nèi)存泄露。

測試數(shù)據(jù):
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

9.鏈表尾部刪除節(jié)點

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
具體怎么實現(xiàn)的都注釋在代碼邊上了,就直接開始測試用例看一下有沒有問題。

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
為了方便對比,每次刪除一個節(jié)點后都有打印一次鏈表在屏幕上。

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

可以看出這個代碼是成功的了,將尾部的三個數(shù)據(jù)都成功的刪除了。
那么再來看一下assert函數(shù)能不能起作用,這邊故意多刪除幾個,看會不會報錯。
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
這里也是能看見是報錯了的,并且能夠直接看出來是在list.c文件的第75行出的問題,如果再看一次實現(xiàn)函數(shù)的代碼的話,確實就能看見是75行的assert報的錯誤。

10.鏈表頭部刪除節(jié)點

函數(shù)實現(xiàn):
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
測試用例:

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
可以看出,頭刪也是成功了,因為assert函數(shù)的實現(xiàn)是一樣的,這邊就不過多測試了。

11.查找和修改節(jié)點

函數(shù)實現(xiàn):

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
函數(shù)的測試用例:
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
可以看到這個查找和修改的功能也是成功了。

12.在鏈表pos之前插入節(jié)點

函數(shù)實現(xiàn):
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
測試用例:
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
數(shù)字9也是成功的插入到了3的前面,那么這個函數(shù)也是成功的實現(xiàn)了。
而成功的實現(xiàn)了這個函數(shù),我們就可以將這個函數(shù)復用到頭插和尾插函數(shù)當中。
函數(shù)復用實現(xiàn):

  1. 頭插:【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
  2. 尾插:【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

13.在鏈表pos處刪除該節(jié)點

函數(shù)實現(xiàn):
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
測試用例:

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
可以看到結果也是與我們預期的相符合,這個函數(shù)也是成功了。
同樣這個函數(shù)也是可以復用到頭刪和尾刪中的。

  1. 頭刪:【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

  2. 尾刪:【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

test.c

那么接下來就把所有的代碼放在這里。
test.c是函數(shù)主題的框架,用來執(zhí)行函數(shù)的功能。
【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

list.c

list.c是每個功能函數(shù)具體實現(xiàn)的代碼

【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記

list.h

list.h是聲明頭文件和函數(shù)指針以及定義結構體的部分。【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點),數(shù)據(jù)結構,鏈表,c語言,筆記
本篇完畢,如有錯誤,歡迎大佬指正!文章來源地址http://www.zghlxwxcb.cn/news/detail-860595.html

到了這里,關于【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表(小白作品,如果有誤,請大佬指點)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 數(shù)據(jù)結構---帶頭雙向循環(huán)鏈表

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

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

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

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

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

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

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

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

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

    相較于之前的順序表和單向鏈表,雙向鏈表的邏輯結構稍微復雜一些,但是在實現(xiàn)各種接口的時候是很簡單的。因為不用找尾,寫起來會舒服一點。(也可能是因為最近一直在寫這個的原因) 在實現(xiàn)接口的時候,除了沒有找尾,其他的操作和單向鏈表是差不多的,這里就不多

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

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

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

    2024年02月10日
    瀏覽(20)
  • 【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表及其實現(xiàn)

    【數(shù)據(jù)結構】帶頭雙向循環(huán)鏈表及其實現(xiàn)

    目錄 1.帶頭雙向循環(huán)鏈表 2.帶頭雙向循環(huán)鏈表實現(xiàn) 2.1初始化 2.2銷毀 2.3頭插 2.4鏈表打印 2.5頭刪數(shù)據(jù) 2.6尾插數(shù)據(jù) 2.7尾刪數(shù)據(jù) 2.8鏈表判空? 2.9查找一個數(shù)據(jù) 2.10在pos位置前插入數(shù)據(jù) 2.11刪除pos位置 2.12求鏈表的長度 2.順序表和鏈表的比較 我們已經(jīng)實現(xiàn)了無頭單向循環(huán)鏈表 帶頭雙

    2024年02月10日
    瀏覽(25)
  • 【數(shù)據(jù)結構】線性表——帶頭雙向循環(huán)鏈表

    【數(shù)據(jù)結構】線性表——帶頭雙向循環(huán)鏈表

    帶頭雙向循環(huán)鏈表的優(yōu)點 1.支持任意位置時間復雜度為O(1)的插入和刪除。 2.按照需求申請釋放空間,無需擔心空間不夠用,無需擔心浪費。 3.帶頭可以省去鏈表為空時的判斷,可以使代碼更加簡約 帶頭雙向循環(huán)鏈表的缺點 1.不可以進行下標隨機訪問。 2.緩存利用率低 帶頭雙

    2024年02月03日
    瀏覽(14)
  • 【數(shù)據(jù)結構】雙向帶頭循環(huán)鏈表的實現(xiàn)

    【數(shù)據(jù)結構】雙向帶頭循環(huán)鏈表的實現(xiàn)

    前言:在前面我們學習了順序表、單向鏈表,今天我們在單鏈表的基礎上進一步來模擬實現(xiàn)一個帶頭雙向鏈表。 ?? 博主CSDN主頁:衛(wèi)衛(wèi)衛(wèi)的個人主頁 ?? ?? 專欄分類:數(shù)據(jù)結構 ?? ??代碼倉庫:衛(wèi)衛(wèi)周大胖的學習日記?? ??關注博主和博主一起學習!一起努力! 帶頭雙向循環(huán)鏈

    2024年01月15日
    瀏覽(23)
  • 數(shù)據(jù)結構: 線性表(帶頭雙向循環(huán)鏈表實現(xiàn))

    數(shù)據(jù)結構: 線性表(帶頭雙向循環(huán)鏈表實現(xiàn))

    之前一章學習了單鏈表的相關操作, 但是單鏈表的限制卻很多, 比如不能倒序掃描鏈表, 解決方法是在數(shù)據(jù)結構上附加一個域, 使它包含指向前一個單元的指針即可. 那么怎么定義數(shù)據(jù)結構呢? 首先我們先了解以下鏈表的分類 鏈表的結構非常多樣, 以下情況組合起來就有 8 中鏈表

    2024年02月14日
    瀏覽(26)
  • 數(shù)據(jù)結構入門指南:帶頭雙向循環(huán)鏈表

    數(shù)據(jù)結構入門指南:帶頭雙向循環(huán)鏈表

    目錄 文章目錄 前言 1.結構與優(yōu)勢 2.鏈表實現(xiàn)? ? ?? 2.1 定義鏈表 2.2 創(chuàng)建頭節(jié)點 2.3 尾插 2.4 輸出鏈表 2.5 尾刪 2.6 頭插 2.7頭刪 2.8?節(jié)點個數(shù) 2.9?查找 2.10?位置插入 2.11 位置刪除 2.12 銷毀鏈表 ?3. 源碼 總結 ? ? ? ? 鏈表一共有8種結構,但最常用的就是無頭單向鏈表、和帶頭

    2024年02月14日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包