雙向鍊錶:就是在單向鍊錶的基礎上加了乙個pre(指向該節點的前乙個節點)域,其他的沒有改變,在對鍊錶進行增刪相關操作時在單向鍊錶的基礎上多以乙個向前節點連線的動作即可。
因為有了指向前乙個節點域,所以雙向在查詢資料上比單向的速度要快。
1/**2
* 雙向鍊錶3*/
4class
doublelinkedlist
1011
/**12
* 雙向鍊錶按照順序新增資料
13*/
14public
void
addbyoder(startnode2 startnode2)
22if (temp.next.no >startnode2.no)
26if (temp.next.no ==startnode2.no)
30 temp =temp.next;31}
32if
(flag) else
else44}
45}4647
/**48
* 雙向鍊錶新增資料,與單向鍊錶差不多,需要在新增的資料上比單向多乙個pre
49*/
50public
void
add(startnode2 startnode2)
55 temp.next =startnode2;
56 startnode2.pre =temp;57}
5859
/**60
* 顯示鍊錶,與單向鍊錶相同
61*/
62public
void
showlist()
67 startnode2 temp =head.next;
68while (temp != null
) 72}73
74/**
75* 修改雙向鍊錶中的資料,與單向鍊錶的修改資料方式相同
76*/
77public
void
update(startnode2 startnode2)
82boolean flag = false
;83 startnode2 temp =head;
84while (temp.next != null
) 89 temp =temp.next;90}
91if
(flag) else97}
9899
/**100
* 刪除雙向鍊錶中的資料,與單向不同
101* 單向需要找到被刪除節點的前乙個節點
102* 雙向鍊錶則不同,只需要將需要刪除的節點自身next,pre修改即可
103*/
104public
void delete(int
num)
109boolean flag = false
;110 startnode2 temp =head.next;
111while (true
) 115
if (temp.no ==num)
119 temp =temp.next;
120}
121if
(flag)
126 system.out.printf("no為%d的資料已刪除\n", num);
127 } else
130131
}132
}133
134class
startnode2
146147
@override
148public
string tostring() ';
154}
155 }
線性結構 雙向鍊錶
雙向鍊錶 1.單向鍊錶的特點 1.只能從頭遍歷到尾,或者從尾遍歷到頭 一般是從頭到尾 即鍊錶數單向的 2.單向鍊錶存在的問題 2.而實際中,我們需要從某個節點嗲它的上乙個節點。如文字編輯中,通過前後箭頭可以使得游標前後移動 3.雙向鍊錶的特點 1.既可以從頭遍歷到尾,也可以從尾遍歷到頭 4.雙向鍊錶...
資料結構 雙向鍊錶
前幾天寫了乙個單向鍊錶,今天參考自己單向鍊錶改寫了乙個雙向非迴圈鍊錶,下面只討論雙向非迴圈鍊錶。雙向非迴圈鍊錶有如下特點 一 雙向鍊錶每個結點都有乙個前驅指標和後驅指標 當然頭結點和尾結點除外 二 雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。三 頭結點只有後驅指標沒有前驅...
資料結構 雙向鍊錶
單鏈表的單向性 只能從頭結點開始高效訪問鍊錶中的資料元素。單鏈表還存在另乙個缺陷 逆序訪問時候的效率極低。如下 linklistlist for int i 0 i 5 i for int i list.length 1 i 0 i 根據大o推算法可以得出乙個for迴圈的時間複雜度為o n get ...