C/C++編程筆記:C語言詳解"雙向循環鏈表"的基本操做(上)

1.雙向鏈表的定義

單向鏈表特色:編程

1.咱們能夠輕鬆的到達下一個節點, 可是回到前一個節點是很難的.微信

2.只能從頭遍歷到尾或者從尾遍歷到頭(通常從頭至尾)學習

雙向鏈表特色:3d

1.每次在插入或刪除某個節點時, 須要處理四個節點的引用, 而不是兩個. 實現起來要困難一些指針

2.相對於單向鏈表, 必然佔用內存空間更大一些.視頻

3.既能夠從頭遍歷到尾, 又能夠從尾遍歷到頭blog

雙向鏈表的定義:教程

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每一個數據結點中都有兩個指針,分別指向直接後繼和直接前驅。因此,從雙向鏈表中的任意一個結點開始,均可以很方便地訪問它的前驅結點和後繼結點。下圖爲雙向鏈表的結構圖。內存

從上中能夠看到,雙向鏈表中各節點包含如下 3 部分信息:get

指針域:用於指向當前節點的直接前驅節點;

數據域:用於存儲數據元素。

指針域:用於指向當前節點的直接後繼節點;

雙向循環鏈表的定義:

雙向鏈表也能夠進行首尾鏈接,構成雙向循環鏈表,以下圖所示

在建立鏈表時,只須要在最後將收尾相連便可(建立鏈表代碼中已經標出)。其餘代碼稍加改動便可。

雙鏈表的節點結構用 C 語言實現爲:

2.雙向鏈表的建立

同單鏈表相比,雙鏈表僅是各節點多了一個用於指向直接前驅的指針域。所以,咱們能夠在單鏈表的基礎輕鬆實現對雙鏈表的建立。

須要注意的是,與單鏈表不一樣,雙鏈表建立過程當中,每建立一個新節點,都要與其前驅節點創建兩次聯繫,分別是:

將新節點的 prior 指針指向直接前驅節點;

將直接前驅節點的 next 指針指向新節點;

這裏給出建立雙向鏈表的 C 語言實現代碼:

3.雙向鏈表的插入

根據數據添加到雙向鏈表中的位置不一樣,可細分爲如下 3 種狀況:

1.添加至表頭

將新數據元素添加到表頭,只須要將該元素與表頭元素創建雙層邏輯關係便可。

換句話說,假設新元素節點爲 temp,表頭節點爲 head,則須要作如下 2 步操做便可:

temp->next=head; head->prior=temp;

將 head 移至 temp,從新指向新的表頭;

將新元素 7 添加至雙鏈表的表頭,則實現過程以下圖所示:

2.添加至表的中間位置

同單鏈表添加數據相似,雙向鏈表中間位置添加數據須要通過如下 2 個步驟,以下圖所示:

新節點先與其直接後繼節點創建雙層邏輯關係;

新節點的直接前驅節點與之創建雙層邏輯關係;

3.添加至表尾

與添加到表頭是一個道理,實現過程以下:

找到雙鏈表中最後一個節點;

讓新節點與最後一個節點進行雙層邏輯關係;

本次分享就到這裏了!學習知識並不能一蹴而就,一步步來喲~

下篇文章爲你們分享雙向鏈表的刪除以及查找,必定要看哦!

另外若是你想更好的提高你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這裏或許能夠幫到你~

C語言C++編程學習交流圈子,QQ羣1090842465點擊進入】微信公衆號:C語言編程學習基地

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!

編程學習書籍分享:

編程學習視頻分享:

相關文章
相關標籤/搜索