`` `java
δημόσια τάξη ArrayHeap {
ιδιωτικό int [] Heap;
ιδιωτικό μέγεθος int.
ιδιωτική ικανότητα int ·
δημόσιο arrayHeap (χωρητικότητα int) {
this.capacity =χωρητικότητα;
this.heap =νέο int [χωρητικότητα + 1]; // Ο δείκτης 0 δεν χρησιμοποιείται
this.size =0;
}
// Λειτουργία βοηθητικού για να λάβετε τον γονικό δείκτη
ιδιωτικός γονέας int (int i) {
επιστροφή I / 2;
}
// Λειτουργία βοηθητικού για να λάβετε το αριστερό δείκτη παιδιού
Ιδιωτικό int αριστερά (int i) {
επιστροφή 2 * i;
}
// Λειτουργία βοηθού για να λάβετε το σωστό δείκτη παιδιού
ιδιωτικό int right (int i) {
επιστροφή 2 * i + 1;
}
// Λειτουργία βοηθητικού για να επικεντρωθεί μετά την εισαγωγή
ιδιωτικό κενό heapifyup (int i) {
ενώ (i> 1 &&σωρός [γονέας (i)]> Heap [i]) {
ανταλλαγή (i, γονέας (i));
i =γονέας (i);
}
}
// Λειτουργία βοηθητικού για να επικεντρωθεί μετά τη διαγραφή
ιδιωτικό κενό heapifydown (int i) {
int μικρότερο =i;
int l =αριστερά (i);
int r =δεξιά (i);
αν (l <=μέγεθος &&heap [l]
}
αν (r <=μέγεθος &&heap [r]
}
αν (μικρότερο! =i) {
ανταλλαγή (i, μικρότερο);
heapifydown (μικρότερο);
}
}
// Λειτουργία βοηθού για ανταλλαγή δύο στοιχείων
ιδιωτική swap (int i, int j) {
int temp =σωρός [i];
Heap [i] =Heap [J];
Heap [j] =temp;
}
// Εισαγάγετε ένα νέο στοιχείο στο σωρό
δημόσιο κενό ένθετο (int κλειδί) {
αν (μέγεθος ==χωρητικότητα) {
Ρίξτε νέα παράνομη κατάσταση ("HEAP είναι γεμάτο").
}
μέγεθος ++;
σωρός [μέγεθος] =κλειδί;
heapifyup (μέγεθος);
}
// Εξαγάγετε (και αφαιρέστε) το ελάχιστο στοιχείο
δημόσιο int extractmin () {
αν (μέγεθος ==0) {
ρίξτε νέα παράνομη κατάσταση ("HEAP είναι άδειο")?
}
int min =σωρός [1];
σωρός [1] =σωρός [μέγεθος];
μέγεθος--;
heapifydown (1);
Επιστροφή Min;
}
// Λάβετε το ελάχιστο στοιχείο χωρίς να το αφαιρέσετε
δημόσιο int peekmin () {
αν (μέγεθος ==0) {
ρίξτε νέα παράνομη κατάσταση ("HEAP είναι άδειο")?
}
επιστροφή σωρού [1];
}
// Ελέγξτε αν ο σωρός είναι άδειος
δημόσια boolean isEmpty () {
Μέγεθος επιστροφής ==0;
}
δημόσιο στατικό κενό κύριο (String [] args) {
ArrayHeap Heap =νέο ArrayHeap (10);
Heap.insert (10);
Heap.insert (5);
Heap.insert (15);
Heap.insert (3);
Heap.insert (8);
System.out.println ("Ελάχιστο στοιχείο:" + heap.peekmin ()); // έξοδος:3
System.out.println ("Εξαγόμενο ελάχιστο στοιχείο:" + Heap.ExtractMin ()); // έξοδος:3
System.out.println ("Νέο ελάχιστο στοιχείο:" + heap.peekmin ()); // έξοδος:5
}
}
`` `
Αυτή η εφαρμογή παρέχει βασικές λειτουργίες σωρού. Θυμηθείτε ότι αυτό είναι ένα *min-heap *? Για να το κάνετε ένα *max-heap *, θα πρέπει να αντιστρέψετε τη λογική σύγκρισης στο `heapifyup` και το` heapifydown '. Για μεγαλύτερους σωρούς, σκεφτείτε να χρησιμοποιήσετε μια πιο εξελιγμένη δομή δεδομένων ή βιβλιοθήκη εάν η απόδοση γίνει κρίσιμη. Θα μπορούσατε επίσης να επεκτείνετε αυτό για να χειριστείτε τα γενόσημα για περισσότερους ευέλικτους τύπους δεδομένων. Θυμηθείτε να χειριστείτε πιθανές εξαιρέσεις όπως «παράνομη κατάσταση) για άδειους ή πλήρους σωρούς.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα