Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
`` `Java
verejné triedy ArrayHeap {
súkromné int [] halda;
súkromná veľkosť int;
súkromná kapacita;
public ArrayHeap (int kapacita) {
this.capacity =kapacita;
this.Heap =new Int [kapacita + 1]; // index 0 sa nepoužíva
this.Size =0;
}
// funkcia pomocníka na získanie rodičovského indexu
private int parent (int i) {
návrat I / 2;
}
// Funkcia pomocníka, aby ste získali index ľavého dieťaťa
súkromné int vľavo (int i) {
návrat 2 * i;
}
// funkcia pomocníka, aby ste získali správny index dieťaťa
private int right (int i) {
návrat 2 * i + 1;
}
// Funkcia pomocníka na hromadenie po vložení
private void heapifyup (int i) {
while (i> 1 &&heap [parent (i)]> heap [i]) {
swap (i, rodič (i));
i =rodič (i);
}
}
// funkcia pomocníka na zahrnutie po vymazaní
private void heapifydown (int i) {
int najmenší =i;
int l =vľavo (i);
int r =right (i);
if (l <=size &&heap [l]
}
if (r <=size &&heap [r]
}
if (najmenšie! =i) {
swap (i, najmenší);
Heapifydown (najmenší);
}
}
// funkcia pomocníka na výmenu dvoch prvkov
private void swap (int i, int j) {
int temp =halda [i];
halda [i] =halda [j];
halda [j] =temp;
}
// Vložte nový prvok do hromady
public void insert (int key) {
if (size ==kapacita) {
Hodiť nový nelegálnyStateException („Halda je plná“);
}
veľkosť ++;
halda [veľkosť] =kľúč;
Heapifyup (veľkosť);
}
// extrahovať (a odstrániť) minimálny prvok
public int extractmin () {
if (size ==0) {
hodiť nový nelegálnyStateException („Halda je prázdna“);
}
int min =halda [1];
halda [1] =halda [veľkosť];
veľkosť--;
Heapifydown (1);
návrat min;
}
// Získajte minimálny prvok bez jeho odstránenia
public int peekmin () {
if (size ==0) {
hodiť nový nelegálnyStateException („Halda je prázdna“);
}
návrat halda [1];
}
// Skontrolujte, či je halda prázdna
public boolean isempty () {
veľkosť návratu ==0;
}
public static void main (String [] args) {
ArrayHeap Heap =new ArrayHeap (10);
halda.insert (10);
halda.insert (5);
halda.insert (15);
halda.insert (3);
halda.insert (8);
System.out.println ("Minimálny prvok:" + heap.peekmin ()); // výstup:3
System.out.println ("Extrahovaný minimálny prvok:" + heap.extractmin ()); // výstup:3
System.out.println ("nový minimálny prvok:" + heap.peekmin ()); // výstup:5
}
}
`` `
Táto implementácia poskytuje základné operácie haldy. Pamätajte, že toto je *min-heap *; Aby ste to urobili *max-heap *, musíte zvrátiť porovnávaciu logiku v `heapifyup` a` heapifydown`. V prípade väčších haldy zvážte použitie sofistikovanejšej štruktúry údajov alebo knižnice, ak sa výkon stane kritickým. Môžete to tiež rozšíriť, aby ste spracovali všeobecné generiky pre všestrannejšie typy údajov. Nezabudnite zvládnuť potenciálne výnimky, ako napríklad „NelegalStateException“ pre prázdne alebo plné hromady.