Πώς να εφαρμόσετε μια ουρά προτεραιότητας στο C ++



Αυτό το άρθρο θα σας δώσει αναλυτικές και περιεκτικές γνώσεις σχετικά με τον τρόπο εφαρμογής μιας ουράς προτεραιότητας στο C ++ με παραδείγματα.

Η ουρά προτεραιότητας είναι ένα κοντέινερ στο STL. Είναι παρόμοιο με την ουρά, εκτός από το γεγονός ότι κάθε στοιχείο της ουράς προτεραιότητας έχει συγκεκριμένη προτεραιότητα και όταν αναδύουμε στοιχεία από την ουρά προτεραιότητας, τα στοιχεία με την υψηλότερη προτεραιότητα εμφανίζονται πρώτα. Όπως και στην ουρά προτεραιότητας, υπάρχουν 10 διαφορετικοί τύποι κοντέινερ STL . Ένα κοντέινερ είναι ένα αντικείμενο που αποθηκεύει δεδομένα. Τα κοντέινερ STL υλοποιούνται με τη βοήθεια κλάσεων προτύπων, επομένως είναι εύκολο να προσαρμόσετε το να κρατάει διαφορετικούς τύπους δεδομένων. Σε αυτήν την ανάρτηση, θα συζητήσουμε λεπτομερώς την ουρά προτεραιότητας και τις έννοιες που σχετίζονται με αυτήν. Οι παρακάτω δείκτες θα καλυφθούν σε αυτό το άρθρο προτεραιότητας στο άρθρο C ++,

Προχωρώντας με αυτό το άρθρο σχετικά με την ουρά προτεραιότητας στο C ++





Συστατικά του STL

Το STL αποτελείται από κλάσεις προτύπων και λειτουργίες που μπορούν να χρησιμοποιηθούν ως τυπική προσέγγιση για την αποθήκευση και επεξεργασία δεδομένων. Ας συζητήσουμε τα συστατικά του STL

Εμπορευματοκιβώτια- Υπάρχουν 10 τύποι εμπορευματοκιβωτίων που ορίζονται στο STL και αυτοί ομαδοποιούνται σε 3 κατηγορίες. Από αυτά τα 3, οι ουρές προτεραιότητας ανήκουν στην κατηγορία του προερχόμενου κοντέινερ. Κάθε κατηγορία κοντέινερ έχει το δικό της σύνολο λειτουργιών που μπορούν να χρησιμοποιηθούν για τον χειρισμό των δεδομένων.



Αλγόριθμος - Ένας αλγόριθμος είναι μια μέθοδος που χρησιμοποιείται για την επεξεργασία των δεδομένων που υπάρχουν στο αντικείμενο κοντέινερ. Το STL παρέχει πολλούς διαφορετικούς τύπους αλγορίθμων που μπορούν να χρησιμοποιηθούν στην προετοιμασία, αναζήτηση, ταξινόμηση, συγχώνευση, αντιγραφή. Οι αλγόριθμοι εφαρμόζονται με τη βοήθεια συναρτήσεων προτύπου.

Επαναληπτικός- Ο επαναληπτής είναι ένα αντικείμενο που δείχνει προς ένα στοιχείο στο κοντέινερ. Οι επαναληπτές μπορούν να βοηθήσουν στη χρήση των περιεχομένων ενός δοχείου. Οι επαναληπτές είναι σαν δείκτες που μπορούν να αυξηθούν και να μειωθούν. Λειτουργεί ως σύνδεσμος μεταξύ του αλγορίθμου και του κοντέινερ. Οι επαναληπτές χρησιμοποιούνται για το χειρισμό των δεδομένων που είναι αποθηκευμένα σε ένα κοντέινερ.

Προχωρώντας με αυτό το άρθρο σχετικά με την ουρά προτεραιότητας στο C ++



Ουρά και ουρά προτεραιότητας

Όπως είδαμε προηγουμένως, η ουρά προτεραιότητας ανήκει στην κατηγορία των παραγόμενων κοντέινερ. Άλλα μέλη αυτής της κατηγορίας είναι στοίβα και ουρά. Αυτά τα παράγωγα δοχεία είναι επίσης γνωστά ως προσαρμογείς δοχείων.

Οι στοίβες στοίβας, ουράς και προτεραιότητας είναι γνωστές ως παράγωγα κοντέινερ καθώς κατασκευάζονται από διαφορετικά δοχεία ακολουθίας. Αυτά τα κοντέινερ δεν υποστηρίζουν κανένα τύπο επανάληψης που δεν χρησιμοποιούνται για χειρισμό δεδομένων.

Τι ακριβώς είναι η ουρά προτεραιότητας;

Με απλά λόγια, είναι ένα κοντέινερ που χρησιμοποιήσαμε για την αποθήκευση δεδομένων. Σε κάθε στοιχείο των αποθηκευμένων δεδομένων έχει ορισμένη προτεραιότητα που μπορεί να μας βοηθήσει στην αποθήκευση δεδομένων με λογική σειρά.
Σύνταξη:priority_queue variable_name

Είναι σημαντικό να συμπεριλάβετε ένα αρχείο κεφαλίδας στο πρόγραμμα για να χρησιμοποιήσετε μια ουρά προτεραιότητας.

ουρά προτεραιότητας στο c ++Για παράδειγμα, εάν προσθέσουμε 2, 10, 30, 5, 6 στην ουρά προτεραιότητας χρησιμοποιώντας τη λειτουργία ώθησης και στη συνέχεια ανοίξτε τα στοιχεία χρησιμοποιώντας τη λειτουργία pop, η έξοδος θα είναι 30, 10, 6, 5, 2

Εντάξει, λοιπόν τώρα γνωρίζουμε τον σκοπό ή τη χρήση της ουράς προτεραιότητας. Αλλά πώς ήξερε αν 30> 10; Κάνει κάποιο είδος διαλογής; Σε αυτό το σημείο, οι σωροί έρχονται στην εικόνα. Για να μάθετε λεπτομερώς τους σωρούς ανατρέξτε σε αυτό το άρθρο.

Σωροί - Οι σωροί είναι σαν δέντρα. Με βάση τον τρόπο με τον οποίο οι κόμβοι θυγατρικών στοιχείων είναι διατεταγμένοι σε έναν σωρό σε σχέση με τους γονικούς κόμβους, οι σωροί υποδιαιρούνται σε 2 μέρη

ένας. Ελάχιστο σωρό- Στο Min Heap, η τιμή του γονικού κόμβου είναι μικρότερη ή ίση με την τιμή των θυγατρικών κόμβων.

2. Μέγιστος σωρός- Στο Max Heap, η τιμή του γονικού κόμβου είναι μεγαλύτερη ή ίση με την τιμή των θυγατρικών κόμβων.

δομές δεδομένων και αλγόριθμοι στο java tutorial

Σημείωση- Η ουρά προτεραιότητας δεν ταξινομεί τα στοιχεία χρησιμοποιώντας κάποιο αλγόριθμο ταξινόμησης, αλλά αποθηκεύει τα δεδομένα με τη μορφή σωρού.

Προχωρώντας με αυτό το άρθρο σχετικά με την ουρά προτεραιότητας στο C ++

Εκτύπωση όλων των στοιχείων μιας ουράς προτεραιότητας

Αφού κατανοήσουμε τα βασικά στοιχεία της ουράς προτεραιότητας, ας εφαρμόσουμε προγράμματα για να κατανοήσουμε τις πιο συχνά χρησιμοποιούμενες μεθόδους με ουρά προτεραιότητας

#include #include χρησιμοποιώντας χώρο ονομάτων std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) ενώ (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Παραγωγή:

30 15 10 9 6 2

Στο παραπάνω πρόγραμμα, χρησιμοποιήσαμε τις συναρτήσεις pop (), top () και push () που χρησιμοποιούνται τις περισσότερες φορές κατά την αντιμετώπιση μιας ουράς προτεραιότητας. Ας ρίξουμε μια ματιά σε μερικές από τις μεθόδους που μπορούμε να χρησιμοποιήσουμε με ουρά προτεραιότητας

Μέγεθος( ): Αυτή η συνάρτηση επιστρέφει το μέγεθος της ουράς προτεραιότητας

άδειο (): Αυτή η λειτουργία χρησιμοποιείται για να ελέγξει αν η ουρά προτεραιότητας είναι κενή ή όχι. Επιστρέφει αλήθεια ότι η ουρά προτεραιότητας είναι κενή.

ώθηση (): Εισάγει ένα στοιχείο στην ουρά προτεραιότητας.

ποπ (): Αυτή η συνάρτηση καταργεί το κορυφαίο στοιχείο της ουράς προτεραιότητας που είναι το στοιχείο με την υψηλότερη προτεραιότητα.

ανταλλαγή (): Αυτή η συνάρτηση ανταλλάσσει τα στοιχεία της ουράς προτεραιότητας με μια άλλη ουρά προτεραιότητας. Η συνάρτηση παίρνει μια ουρά προτεραιότητας ως παράμετρο.

emplace (): Αυτή η συνάρτηση χρησιμοποιήθηκε για την προσθήκη ενός στοιχείου στην κορυφή της ουράς προτεραιότητας.

Ας δούμε ένα ακόμη πρόγραμμα.

#include #include χρησιμοποιώντας χώρο ονομάτων std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) ενώ (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Παραγωγή:

2 6 7 9 10 15 30

Με αυτό, καταλήγουμε στο τέλος αυτής της σειράς προτεραιότητας στο άρθρο C ++. Εάν θέλετε να μάθετε περισσότερα, ρίξτε μια ματιά στο από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία μάθησης. Το μάθημα εκπαίδευσης και πιστοποίησης Java J2EE και SOA της Edureka έχει σχεδιαστεί για να σας εκπαιδεύσει τόσο για βασικές όσο και για προχωρημένες ιδέες Java μαζί με διάφορα πλαίσια Java όπως το Hibernate & Spring.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων αυτού του ιστολογίου και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό.