優先順序佇列:用有序陣列實現,刪除最大數最快o(1),插入最慢
用堆實現優先順序佇列,插入和刪除都很快o(logn)
堆:是一種樹,一種特殊的二叉樹
特點:1.他是完全的二叉樹,除了樹的最後一層節點不需要是滿的,其他一層從左到右都是滿的。
2.它常常用乙個陣列實現。
3.堆中每乙個節點都滿足堆的條件,父節點的關鍵字要大於所有子節點。
堆是弱序,(接近沒有排序,不支援遍歷),最大好處,快速移除最大節點,快速插入乙個新節點。做優先順序佇列很合適。
package com.zoujc.heap;
/** * 堆排序
*/public
class
node
public
intgetkey()
public
void
setkey
(int id)
}class
heap
public
boolean
isempty()
public
void
insertat
(int index,node newnode)
public
void
incrementsize()
public node remove()
//向下調整
public
void
trickledown
(int index)
else
if(top.
getkey()
>= heaparray[largerchild]
.getkey()
) heaparray[index]
= heaparray[largerchild]
; index = largerchild;
} heaparray[index]
= top;
}//樹狀顯示
public
void
displyheap()
} system.out.
print
(heaparray[j]
.getkey()
);if(
++j == currentsize)if(
++column == itemsperrow)
else}}
system.out.
println
("\n"
+dots+dots);}
//按陣列方式顯示
public
void
displayarray()
system.out.
println()
;}}
Java資料結構與演算法
1.1 概念資料結構主要是研究程式設計問題中計算機的操作物件以及它們之間的關係和操作的學科。1.2 分類儲存結構 存在於計算機世界的物理層面 邏輯結構 一種是資料結構的邏輯層面 1.3 按照資料元素分類線性 存在於計算機世界的物理層面 非線性 一種是資料結構的邏輯層面 1.4 集合結構只考慮資料元素...
資料結構與演算法分析Java版練習1 6
package ch01 練習1.6 編寫帶有下列宣告的例程 public void permute string str public void permute char str,int low,int high 第乙個例程是個驅動程式,它呼叫第二個例程並顯示string str中的字元的所有排列...
資料結構與演算法分析Java版練習1 13
package ch01 練習1.13 設計乙個泛型類collection,它儲存object物件的集合 在陣列中 以及該集合的大小。提供public方法 isempty,makeempty,insert,remove和ispresent。方法ispresent x 當且僅當在該集合中存在 由equ...