資料結構之雙向鍊錶

2021-10-23 06:29:16 字數 2564 閱讀 1043

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

相對於單向鍊錶, 雙向鍊錶必然占用記憶體空間更大一些. 但是這些缺點和我們使用起來的方便程度相比, 是微不足道的. 既可以從頭遍歷到尾, 又可以從尾遍歷到頭

分析雙向鍊錶的遍歷,新增,修改,刪除的操作思路 ===> **實現

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

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

修改思路和原來的單向鍊錶- -樣。

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

temp.next = newheronode

newheronode.pre = temp;

4)刪除

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

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

(3) temp.pre.next = temp.next

(4) temp.next.pre= temp.pre;

**示例

package test;

public

class

doublelinklistdemo

}class

doublelistlist

// 顯示遍歷鍊錶

public

void

list()

// 因為頭結點不能動,因此我們需要乙個互助變數來遍歷

heronode2 temp = head.next;

while

(true

)// 輸出節點

system.out.

println

(temp)

;// 輸出節點後一定要將temp後移,一定小心

temp = temp.next;}}

public

void

add(heronode2 heronode)

// 如果沒有找到最後,將temp後移

temp = temp.next;

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

// 形成雙向鍊錶

temp.next = heronode;

heronode.pre = temp;

}public

void

addbyorder

(heronode2 heronode)

//位置找到,就在temp的後面插入

if(temp.next.no > heronode.no)

else

if(temp.next.no == heronode.no)

// 後移,遍歷當前鍊錶

temp = temp.next;}if

(flag)

else

temp.next = heronode;

heronode.pre = temp;}}

public

void

update

(heronode2 newheronode)

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

// 定義乙個輔助變數

heronode2 temp = head.next;

// 表示是否找到該節點

boolean flag =

false

;while

(true)if

(temp.no == newheronode.no)

temp = temp.next;

}// 根據flag判斷是否找到要修改的節點

if(flag)

else

}// 從雙向鍊錶中刪除節點

// 1、對於雙向鍊錶,我們可以直接找到要刪除的節點

// 2、找到後,自我刪除即可

public

void

del(

int no)

// 輔助變數

heronode2 temp = head.next;

// 標誌是否找到待刪除節點

boolean flag =

false

;while

(true)if

(temp.no == no)

// temp後移,遍歷

temp = temp.next;

}// 判斷flag

if(flag)

}else}}

// 定義乙個heronode類,每個heronode物件就是乙個節點

class

heronode2

// 為了顯示方便,我們重寫tostring方法

@override

public string tostring()

';}}

資料結構之雙向鍊錶

簡述 指標域有乙個指標 而言,占用資源更大,但相應的 雙向鍊錶遍歷的時候只需要乙個指標就可以,而且 只有得到其中任何乙個節點就是得到整個鍊錶,單向鍊錶必須得到他的頭節點,才能遍歷整個鍊錶,而且得有兩個指標。實現 bothwaylinklist.h ifndef mymodule h define m...

資料結構之 雙向鍊錶

單鏈表的結點都只有乙個指向下乙個結點的指標。單鏈表的資料元素無法直接訪問其前驅元素。建立鍊錶 銷毀鍊錶 獲取鍊錶長度 清空鍊錶 獲取第pos個元素操作 插入元素到位置pos 刪除位置pos處的元素 dlinklist dlinklist creat 建立乙個鍊錶 void dlinklist des...

資料結構之雙向鍊錶

雙向鍊錶宛如一列火車,剛發明的時候只有乙個頭,如果它的行駛路線為 a b c d e f g h i j k a 這個時候有一批貨物需要從k運到j,那麼它的運輸路線一定是 k a b c d e f g h i j 所以後來火車就有了兩個頭,由此可見雙向鍊錶的重要性!雙向鍊錶 在單鏈表結點上增添了乙...