單向鏈表特色:編程
1.咱們能夠輕鬆的到達下一個節點, 可是回到前一個節點是很難的.微信
2.只能從頭遍歷到尾或者從尾遍歷到頭(通常從頭至尾)學習
雙向鏈表特色:3d
1.每次在插入或刪除某個節點時, 須要處理四個節點的引用, 而不是兩個. 實現起來要困難一些指針
2.相對於單向鏈表, 必然佔用內存空間更大一些.視頻
3.既能夠從頭遍歷到尾, 又能夠從尾遍歷到頭blog
雙向鏈表的定義:教程
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每一個數據結點中都有兩個指針,分別指向直接後繼和直接前驅。因此,從雙向鏈表中的任意一個結點開始,均可以很方便地訪問它的前驅結點和後繼結點。下圖爲雙向鏈表的結構圖。內存
從上中能夠看到,雙向鏈表中各節點包含如下 3 部分信息:get
指針域:用於指向當前節點的直接前驅節點;
數據域:用於存儲數據元素。
指針域:用於指向當前節點的直接後繼節點;
雙向循環鏈表的定義:
雙向鏈表也能夠進行首尾鏈接,構成雙向循環鏈表,以下圖所示
在建立鏈表時,只須要在最後將收尾相連便可(建立鏈表代碼中已經標出)。其餘代碼稍加改動便可。
雙鏈表的節點結構用 C 語言實現爲:
同單鏈表相比,雙鏈表僅是各節點多了一個用於指向直接前驅的指針域。所以,咱們能夠在單鏈表的基礎輕鬆實現對雙鏈表的建立。
須要注意的是,與單鏈表不一樣,雙鏈表建立過程當中,每建立一個新節點,都要與其前驅節點創建兩次聯繫,分別是:
將新節點的 prior 指針指向直接前驅節點;
將直接前驅節點的 next 指針指向新節點;
這裏給出建立雙向鏈表的 C 語言實現代碼:
根據數據添加到雙向鏈表中的位置不一樣,可細分爲如下 3 種狀況:
1.添加至表頭
將新數據元素添加到表頭,只須要將該元素與表頭元素創建雙層邏輯關係便可。
換句話說,假設新元素節點爲 temp,表頭節點爲 head,則須要作如下 2 步操做便可:
temp->next=head; head->prior=temp;
將 head 移至 temp,從新指向新的表頭;
將新元素 7 添加至雙鏈表的表頭,則實現過程以下圖所示:
2.添加至表的中間位置
同單鏈表添加數據相似,雙向鏈表中間位置添加數據須要通過如下 2 個步驟,以下圖所示:
新節點先與其直接後繼節點創建雙層邏輯關係;
新節點的直接前驅節點與之創建雙層邏輯關係;
3.添加至表尾
與添加到表頭是一個道理,實現過程以下:
找到雙鏈表中最後一個節點;
讓新節點與最後一個節點進行雙層邏輯關係;
本次分享就到這裏了!學習知識並不能一蹴而就,一步步來喲~
下篇文章爲你們分享雙向鏈表的刪除以及查找,必定要看哦!
另外若是你想更好的提高你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這裏或許能夠幫到你~
C語言C++編程學習交流圈子,QQ羣1090842465【點擊進入】微信公衆號:C語言編程學習基地
分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!
編程學習書籍分享:
編程學習視頻分享: