Ακολουθεί μια εφαρμογή Java ενός Min-HEAP, συμπεριλαμβανομένων μεθόδων εισαγωγής, εξαγωγής του ελάχιστου στοιχείου και λειτουργίας:
`` `java
δημόσια τάξη minheap {
ιδιωτικό int [] Heap;
ιδιωτικό μέγεθος int.
ιδιωτική ικανότητα int ·
δημόσιο minHeap (χωρητικότητα int) {
this.capacity =χωρητικότητα;
this.heap =νέο int [χωρητικότητα + 1]; // Ο δείκτης 0 δεν χρησιμοποιείται
this.size =0;
}
δημόσια boolean isEmpty () {
Μέγεθος επιστροφής ==0;
}
δημόσια boolean isfull () {
Μέγεθος επιστροφής ==χωρητικότητα;
}
ιδιωτικός γονέας int (int i) {
επιστροφή I / 2;
}
Ιδιωτικό int αριστερά (int i) {
επιστροφή 2 * i;
}
ιδιωτικό int right (int i) {
επιστροφή 2 * i + 1;
}
ιδιωτική swap (int i, int j) {
int temp =σωρός [i];
Heap [i] =Heap [J];
Heap [j] =temp;
}
δημόσιο κενό ένθετο (int κλειδί) {
αν (isfull ()) {
Ρίξτε νέα παράνομη κατάσταση ("HEAP είναι γεμάτο").
}
μέγεθος ++;
σωρός [μέγεθος] =κλειδί;
int i =μέγεθος;
ενώ (i> 1 &&heap [γονέας (i)]> heap [i]) {// min-heap ιδιοκτησία
ανταλλαγή (i, γονέας (i));
i =γονέας (i);
}
}
δημόσιο int extractmin () {
αν (isEmpty ()) {
ρίξτε νέα παράνομη κατάσταση ("HEAP είναι άδειο")?
}
int root =σωρός [1];
σωρός [1] =σωρός [μέγεθος];
μέγεθος--;
Heapify (1);
ρίζα επιστροφής?
}
ιδιωτικό κενό heapify (int i) {
int μικρότερο =i;
int l =αριστερά (i);
int r =δεξιά (i);
αν (l <=μέγεθος &&heap [l]
}
αν (r <=μέγεθος &&heap [r]
}
αν (μικρότερο! =i) {
ανταλλαγή (i, μικρότερο);
Heapify (μικρότερο);
}
}
δημόσιο κενό printheap () {
για (int i =1; i <=μέγεθος; i ++) {
System.out.print (Heap [i] + "");
}
System.out.println ();
}
δημόσιο στατικό κενό κύριο (String [] args) {
Minheap minheap =new minheap (10);
minheap.insert (3);
minheap.insert (2);
minheap.insert (15);
minheap.insert (5);
minheap.insert (4);
minheap.insert (45);
System.out.println ("MinHeap Array:");
minHeap.PrinTheap ();
System.out.println ("Εξαγόμενο min:" + minHeap.ExtractMin ());
System.out.println ("Μετά την εξαγωγή Min:");
minHeap.PrinTheap ();
}
}
`` `
Αυτός ο κωδικός περιλαμβάνει:
* Κατασκευαστής: Αρχικοποιεί τη συστοιχία σωρού με δεδομένη χωρητικότητα. Σημειώστε ότι ο δείκτης 0 δεν χρησιμοποιείται.
* `isEmpty ()` και `isfull ()`: Ελέγξτε την κατάσταση του σωρού.
* `parent ()`, `left ()`, `δεξιά ()`: Ο βοηθός λειτουργεί για να πάρει τους δείκτες των γονικών και παιδικών κόμβων.
* swap () `: Ανταλλαγή δύο στοιχείων στον πίνακα.
* `insert ()`: Εισάγει ένα νέο στοιχείο στο σωρό, διατηρώντας την ιδιοκτησία Min-Heap.
* `extractmin ()`: Αφαιρεί και επιστρέφει το ελάχιστο στοιχείο (ρίζα), διατηρώντας την ιδιότητα min-heap χρησιμοποιώντας `heapify ()`.
* `heapify ()`: Επαναφέρει την ιδιοκτησία Min-HEAP μετά την αφαίρεση ή την εισαγωγή ενός στοιχείου. Συγκρίνει αναδρομικά ένα στοιχείο με τα παιδιά και τις ανταλλαγές του, εάν είναι απαραίτητο.
* `printheap ()`: Μια λειτουργία βοηθού για επίδειξη.
Θυμηθείτε να χειριστείτε πιθανές εξαιρέσεις, όπως η προσπάθεια να εξαγάγετε από ένα κενό σωρό ή να εισαγάγετε σε ένα πλήρες. Αυτό το παράδειγμα χρησιμοποιεί ακέραιες τιμές. Μπορείτε εύκολα να το προσαρμόσετε σε άλλους τύπους δεδομένων χρησιμοποιώντας μια παράμετρο γενικού τύπου. Για μεγαλύτερους σωρούς, σκεφτείτε να χρησιμοποιήσετε μια πιο εξελιγμένη στρατηγική αλλαγής μεγέθους για να αποφύγετε τον περιορισμό της σταθερής ικανότητας.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα