1.雙向鏈表的定義
單向鏈表特點:
1.我們可以輕松的到達下一個節點, 但是回到前一個節點是很難的.
2.只能從頭遍歷到尾或者從尾遍歷到頭(一般從頭到尾)
雙向鏈表特點:
1.每次在插入或洗掉某個節點時, 需要處理四個節點的參考, 而不是兩個. 實作起來要困難一些
2.相對于單向鏈表, 必然占用記憶體空間更大一些.
3.既可以從頭遍歷到尾, 又可以從尾遍歷到頭
雙向鏈表的定義:
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個資料結點中都有兩個指標,分別指向直接后繼和直接前驅,所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點,下圖為雙向鏈表的結構圖,
從上中可以看到,雙向鏈表中各節點包含以下 3 部分資訊:
指標域:用于指向當前節點的直接前驅節點;
資料域:用于存盤資料元素,
指標域:用于指向當前節點的直接后繼節點;
雙向回圈鏈表的定義:
雙向鏈表也可以進行首尾連接,構成雙向回圈鏈表,如下圖所示
在創建鏈表時,只需要在最后將收尾相連即可(創建鏈表代碼中已經標出),其他代碼稍加改動即可,
雙鏈表的節點結構用 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語言編程學習基地
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍分享:

編程學習視頻分享:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238973.html
標籤:其他
