鍊錶是一種遞迴的資料結構,它或者為空(null),或者是指向乙個結點(node)的引用,該結點含有乙個泛型的元素和乙個指向另一條鍊錶的引用。
使用鍊錶實現棧
鍊錶的使用達到了我們的最優設計目標:
package section1_3;
public
class
stackoflinkedlist
public
intsize()
public
boolean
isempty()
public
void
push
(item item)
public item pop()
//測試用例
public
static
void
main
(string[
] args)
;int i=0;
while
(a[i]
!="/0"
)elseif(
!s.isempty()
) system.out.
print
(s.pop()
+" ");
i++;}
system.out.
print
("("
+s.size()
+"left on stack)");
}}
使用鍊錶實現佇列
同上,我們用煉表達到了最優設計目標:它可以處理任意型別的資料,所需空間總是和集合的大小成正比,操作所需的時間總是和集合大小無關。
package section1_3;
public
class
queueoflinkedlist
public
intsize()
public
boolean
isempty()
public
void
enqueue
(item item)
else
n++;}
public item dequeue()
n--;return item;
}//測試用例
public
static
void
main
(string[
] args)
;int i=0;
while
(a[i]
!="/0"
)elseif(
!q.isempty()
) system.out.
print
(q.dequeue()
+" ");
i++;}
system.out.
print
("("
+q.size()
+"left on stack)");
}}
alg4 排序 堆排序
堆排序可以分為兩個階段。在堆的構造階段中,我們將原始陣列重新組織安排進乙個堆中 然後在下沉排序階段,我們從堆中按遞減順序取出所有元素並得到排序結果。堆的構造 從右至左用sink 函式構造子堆。陣列的每個位置都已經是乙個子堆的根結點了,sink 對於這些子堆也適用。如果乙個結點的兩個子結點都已經是堆了...
alg4 排序 歸併排序
歸併操作 即將兩個有序的陣列歸併成乙個更大的有序陣列。歸併排序示意圖 歸併排序最吸引人的性質是它能夠保證將任意長度為n的陣列排序所需時間和nlogn成正比 它的最主要缺點則是它所需的額外空間和n成正比。原地歸併的抽象方法 它將涉及的所有元素複製到乙個輔助陣列中,再把歸併的結果放回原陣列中。merge...
alg4 子字串查詢 KMP演算法
kmp演算法的基本思想是當出現不匹配時,就能知曉一部分文字內容 因為在匹配失敗之前它們已經和模式相匹配 我們可以利用這些資訊避免將指標回退到所有這些已知的字元之前。kmp演算法的主要思想是提前判斷如何重新開始查詢,而這種判斷只取決於模式本身。在kmp子字串查詢演算法中,不會回退文字指標i,而是使用乙...