複習筆記 雙向鍊錶

2021-07-23 07:45:06 字數 1654 閱讀 6546

雙向鍊錶與迴圈鍊錶在插入和刪除時有所不同,因為含有結點的前驅指向,但總體思路相似。

直接上**。

1、雙向鍊錶的插入

int insertlist(doulist l, data_t x, int i)

doulist p = l;//

指向頭指標

int j;

for(j = 1; j < i; j ++)

doulist q = (doulist)malloc(sizeof(dnode));//建立新的結點裝新的內容

if(q != null)

if(1 == i)//當 i= 1時需要將新節點置為第乙個結點,即需要將head指向這個結點

else

return true;

}2、雙向鍊錶的刪除

int dlelist(doulist l, int i)

doulist p = l;//

指向頭指標

int j;

for(j = 1; j < i; j ++)

doulist q = p->next;//將乙個新的鍊錶指標指向需要刪除的結點

p->next = q->next;//將遍歷鍊錶的指標指向需要刪除結點的後乙個結點

q->next->prior = p;//將需要刪除結點的 後乙個結點的前驅 指向 遍歷鍊錶指標 現在所指向的結點

free(q);//釋放新的結點,即刪除該結點

q = null;//將新建立的指標置空,防止其變成野指標

return true;

}總結:不知道會不會是乙份只有自己看的懂得筆記,但是這三張鍊錶(都有頭指標)自己還是真的理解並實現了,鼓掌。難的不會,基礎的還是要搞懂。之前一想到資料結構就想到滿大篇繞來繞去的指向,當我靜下來慢慢將鍊錶理清晰之後,相信後面棧和佇列,以及樹都難不倒我的,不要恐懼。

1、對於有結點位置的引數,需要先判斷

引數是否在鍊錶中合法。首先要約定好第乙個結點為1還是為0;才好判別最終的位置。其中在插入結點的情況下比較特殊,最大可以插入的鍊錶最後乙個結點的後面,所以最大的結點位置為length+1,大於這個值則不合法。

2、對於鍊錶的遍歷,主要要清楚需要

遍歷到什麼位置,或者說遍歷到哪乙個結點更方便操作,清楚之後再判別是將 遍歷鍊錶的指標 先指向 頭指標 還是 指向第乙個結點,以及需要將 遍歷鍊錶的指標 指向 需要操作的結點 還是 前乙個結點?

3、對於鍊錶的插入,一定要遵循

《先連後斷》,考慮清楚斷了之後是否還能找回這個結點?也要考慮清楚連線關係,如果已經改變指標的指向關係,就不能再使用其改變前的指向關係,否則不只是把自己繞暈,鍊錶也就是亂的。

4、對於鍊錶的清零,需要乙個結點乙個結點去刪除,釋放,最後要記得將遍歷鍊錶的

指標置為null,否則容易變成野指標。對於結點的刪除也是同樣的道理,需要乙個結點來儲存要刪除的結點,將新鍊錶連線好,再來操作需要刪除的結點,做乙個負責的程式設計師。

5、對於迴圈鍊錶和雙向鍊錶的插入,當需要把新結點插入之後變成鍊錶的第乙個結點時,需要特殊處理,將

頭指標指向新的結點,否則後面用到鍊錶的時候頭指標指向的第乙個結點並不是新插入的結點,想想也不合理。

6、迴圈鍊錶和雙向鍊錶還需要注意的是,它們最後乙個結點鏈結的是頭而不是null。

7、雙向鍊錶需要考慮結點的前驅指向。

都是自己一些簡單基本的理解,如有錯望指出啊,shine在此感謝。

期末複習 雙向鍊錶

在單鏈表的每個結點裡再增加乙個指向其前趨的指標域prior。這樣形成的鍊錶中就有兩條方向不同的鏈,我們稱之為雙 向 鍊錶。順序儲存的優點 1 用陣列儲存資料元素,操作方法簡單,容易實現。2 無須為表示結點間的邏輯關係而增加額外的儲存開銷。3 儲存密度高。順序儲存的缺點 1 做插入 刪除操作時,須大量...

鍊錶學習筆記 雙向鍊錶

這次 寫的是迴圈鍊錶,用的是節點連線。雙向鍊錶相比與一般鍊錶要注意的地方就是 頭部插入和尾部插入 不要進行空指標操作。非鍊錶尾部的處理 if next null node pre current 如果是在頭部插如 則沒有 前節點 if i 0 tlist lenght return 0 dlinkl...

雙向鍊錶學習筆記

1.鍊錶介面定義 package com.ncs.datastructure.linklist public inte ce ilinklist 2.雙向鍊錶的簡單實現 package com.ncs.datastructure.linklist import com.ncs.datastructu...