資料結構 雙向鍊錶

2021-09-25 10:56:32 字數 2158 閱讀 6578

雙向鍊錶和擔心鍊錶的區別

單向鍊錶,查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢。

單向鍊錶不能自我刪除,需要靠輔助節點 ,而雙向鍊錶,則可以自我刪除,所以前面我們單鏈表刪除時節點,總是找到temp,temp是待刪除節點的前乙個節點.

單向鍊錶

雙向鍊錶

1.遍歷方法和 單鏈表一樣,只是可以向前,也可以向後查詢

思路:判斷鍊錶是否為空

建立乙個臨時變數,遍歷鍊錶

//列印雙向鍊錶

public

void

list()

//因為head節點不能動,所以需要輔助節點,幫助找到尾節點

dnode temp = head.next;

while

(true

)//列印鍊錶資訊

system.out.

println

(temp)

;//繼續遍歷鍊錶

temp = temp.next;

}}

2.新增 (預設新增到雙向鍊錶的最後)

先找到雙向鍊錶的最後這個節點

temp.next = newnode

newnode.pre = temp;

//新增節點到最後

public

void

add(dnode node)

//如果不是最後乙個節點,把temp向後移動一位

temp = temp.next;

}//退出while迴圈時,temp就指向了鍊錶的最後

//形成雙向鍊錶

temp.next = node;

node.pre = temp;

}

3.修改雙向鍊錶的內容

思路:先判斷鍊錶是否為null

建立乙個臨時變數temp遍歷鍊錶

遍歷鍊錶找到對應的節點,修改節點的值

//雙向鍊錶:指定位置修改鍊錶的內容和單鏈表一樣

public

void

updata

(int num,dnode node)

//根據節點編號num,找到需要修改的節點,

//定義乙個輔助變數

dnode temp = head.next;

boolean flag =

false

;//表示是否找到該節點

while

(true)if

(temp.num == node.num)

temp = temp.next;

}//根據flag,判斷是否修改節點內容

if(flag)

else

}

4.刪除

(1) 因為是雙向鍊錶,因此,我們可以實現自我刪除某個節點

(2) 直接找到要刪除的這個節點,比如temp

//雙向鍊錶:刪除指定節點

/* 1. 對於雙向鍊錶,我們可以直接刪除這個節點

2.找到該節點進行自我刪除

*/public

void

remove

(int num)

dnode temp = head.next;

boolean flag =

false

;//表示是否找到要刪除的節點

while

(true)if

(temp.num == num)

temp = temp.next;

}//判斷flag

if(flag)

}else

}

資料結構 鍊錶 雙向鍊錶

注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...

資料結構 雙向鍊錶

前幾天寫了乙個單向鍊錶,今天參考自己單向鍊錶改寫了乙個雙向非迴圈鍊錶,下面只討論雙向非迴圈鍊錶。雙向非迴圈鍊錶有如下特點 一 雙向鍊錶每個結點都有乙個前驅指標和後驅指標 當然頭結點和尾結點除外 二 雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。三 頭結點只有後驅指標沒有前驅...

資料結構 雙向鍊錶

單鏈表的單向性 只能從頭結點開始高效訪問鍊錶中的資料元素。單鏈表還存在另乙個缺陷 逆序訪問時候的效率極低。如下 linklistlist for int i 0 i 5 i for int i list.length 1 i 0 i 根據大o推算法可以得出乙個for迴圈的時間複雜度為o n get ...