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

How Use C Queue



Εισαγωγή

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

Αφού αφαιρεθεί το πρώτο στοιχείο της αρχικής λίστας, το δεύτερο γίνεται το πρώτο στοιχείο. Αφού αφαιρεθεί το δεύτερο στοιχείο, το τρίτο γίνεται το πρώτο και ούτω καθεξής.







Ένα καλό πραγματικό παράδειγμα ουράς είναι όταν οι άνθρωποι παρατάσσονται στη σειρά για να περιμένουν για υπηρεσία ή για καλό. Το πρώτο άτομο εξυπηρετείται πρώτο πριν από το τελευταίο. Ωστόσο, η ουρά που συζητήθηκε σε αυτό το σεμινάριο είναι η ουρά λογισμικού, όπως έχει σχεδιαστεί σε C ++.



FIFO

Το FIFO σημαίνει First-In, First-Out. Είναι ένας άλλος τρόπος εκτίμησης της ουράς. Αυτό σημαίνει ότι, το πρώτο στοιχείο που μπαίνει στη λίστα, είναι το πρώτο στοιχείο που πρέπει να αφαιρεθεί, όποτε πρόκειται να πραγματοποιηθεί αφαίρεση. Η αρχή της λίστας ονομάζεται κεφαλή ή εμπρός. το τέλος της λίστας ονομάζεται πίσω ή ουρά.



Βασικές Λειτουργίες

Μια ουρά λογισμικού πρέπει να έχει τουλάχιστον τις ακόλουθες λειτουργίες:





Σπρώξτε

Αυτή η λειτουργία, προσθέτει ένα νέο στοιχείο στο πίσω μέρος της ουράς. Αυτή η λειτουργία ονομάζεται επίσημα, enqueue.



μετατόπιση

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

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

Τάξη και Αντικείμενα

Μια κλάση είναι ένα σύνολο μεταβλητών και συναρτήσεων που λειτουργούν μαζί, όπου οι μεταβλητές δεν έχουν τιμές εκχωρημένες. Όταν εκχωρούνται τιμές στις μεταβλητές, η κλάση γίνεται αντικείμενο. Διαφορετικές τιμές που δίνονται στην ίδια κλάση οδηγούν σε διαφορετικά αντικείμενα. δηλαδή, διαφορετικά αντικείμενα έχουν την ίδια κλάση με διαφορετικές τιμές. Η δημιουργία ενός αντικειμένου από μια κλάση λέγεται ότι δημιουργεί το αντικείμενο.

Το όνομα, ουρά, είναι μια τάξη. Ένα αντικείμενο που δημιουργήθηκε από την κλάση ουράς έχει ένα όνομα προγραμματιστή που έχει επιλεγεί.

Μια συνάρτηση που ανήκει σε μια κλάση είναι απαραίτητη για την παρουσίαση ενός αντικειμένου από την κλάση. Στο C ++, αυτή η συνάρτηση έχει το ίδιο όνομα με το όνομα της κλάσης. Τα αντικείμενα που δημιουργήθηκαν (ενδεικτικά) από την τάξη έχουν διαφορετικά ονόματα που τους δόθηκαν από τον προγραμματιστή.

Η δημιουργία ενός αντικειμένου από την κλάση σημαίνει την κατασκευή του αντικειμένου. σημαίνει επίσης ενσάρκωση.

Ένα πρόγραμμα C ++ που χρησιμοποιεί την κλάση ουράς, ξεκινά με τις ακόλουθες γραμμές στο επάνω μέρος του αρχείου:

#περιλαμβάνω
#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

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

Υπερφόρτωση μιας λειτουργίας

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

Κατασκευή

Ουρά<τύπος>>όνομα()

Η ακόλουθη δήλωση δημιουργεί μια ουρά με όνομα, que του τύπου int.

Ουρά<int>>ότι?

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

Κατασκευή με Λίστα αρχικοποίησης

Ο ακόλουθος ορισμός δείχνει πώς μπορείτε να δημιουργήσετε μια ουρά με λίστα αρχικοποίησης:

Ουρά<φλοτέρ>>ότι({1.1, 2.2, 3.3, 4.4})?

Καταστροφή ουράς

Για να καταστρέψετε μια ουρά, απλώς αφήστε την να ξεφύγει από το πεδίο εφαρμογής.

Πρόσβαση στο στοιχείο ουράς

ώθηση (τιμή)

Μια ουρά είναι μια λίστα First-In-First-Out. Έτσι, κάθε τιμή προστίθεται από το πίσω μέρος. Το ακόλουθο τμήμα κώδικα δημιουργεί μια κενή ουρά, μετά την οποία προστίθενται πέντε τιμές float από το πίσω μέρος:

Ουρά<φλοτέρ>>ότι?

ότι.Σπρώξτε(1.1)?
ότι.Σπρώξτε(2.2)?
ότι.Σπρώξτε(3.3)?
ότι.Σπρώξτε(4.4)?
ότι.Σπρώξτε(5.5)?

μέγεθος () const

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

Ουρά<φλοτέρ>>ότι?
ότι.Σπρώξτε(1.1)?ότι.Σπρώξτε(2.2)?ότι.Σπρώξτε(3.3)?ότι.Σπρώξτε(4.4)?ότι.Σπρώξτε(5.5)?
κόστος<<ότι.Μέγεθος() << ' n'?

Η έξοδος είναι 5.

εμπρός()

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

Ουρά<φλοτέρ>>ότι?
ότι.Σπρώξτε(1.1)?ότι.Σπρώξτε(2.2)?ότι.Σπρώξτε(3.3)?ότι.Σπρώξτε(4.4)?ότι.Σπρώξτε(5.5)?
κόστος<<ότι.εμπρός() << ' n'?

Το στοιχείο δεν αφαιρείται από την ουρά.

εμπρός () const

Όταν προηγείται η κατασκευή της ουράς με const, η παράσταση front () const εκτελείται αντί για front (). Χρησιμοποιείται, για παράδειγμα, στον ακόλουθο κώδικα.

constΟυρά<φλοτέρ>>ότι({1.1, 2.2, 3.3, 4.4, 5.5})?
κόστος<<ότι.εμπρός() << ' n'?

Επιστρέφεται μια σταθερή αναφορά. Το στοιχείο δεν αφαιρείται από το διάνυσμα. Τα στοιχεία ουράς δεν μπορούν να αλλάξουν.

πίσω()

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

Ουρά<φλοτέρ>>ότι?
ότι.Σπρώξτε(1.1)?ότι.Σπρώξτε(2.2)?ότι.Σπρώξτε(3.3)?ότι.Σπρώξτε(4.4)?ότι.Σπρώξτε(5.5)?
κόστος<<ότι.πίσω() << ' n'?

πίσω () const

Όταν προηγείται η κατασκευή της ουράς με const, η έκφραση back () const εκτελείται αντί για back (). Χρησιμοποιείται, για παράδειγμα, στον ακόλουθο κώδικα.

constΟυρά<φλοτέρ>>ότι({1.1, 2.2, 3.3, 4.4, 5.5})?
κόστος<<ότι.πίσω() << ' n'?

Επιστρέφεται μια σταθερή αναφορά. Το στοιχείο δεν αφαιρείται από την ουρά. Με το προηγούμενο const για την κατασκευή της ουράς, τα στοιχεία στην ουρά δεν μπορούν να αλλάξουν.

Χωρητικότητα ουράς

μέγεθος () const

- βλέπε παραπάνω

κενό () const

Αυτό επιστρέφει 1 για true αν δεν υπάρχουν στοιχεία στην ουρά ή 0 για false αν η ουρά είναι κενή. Ο παρακάτω κώδικας το δείχνει αυτό:

Ουρά<φλοτέρ>>ότι 1({1.1, 2.2, 3.3, 4.4, 5.5})?
κόστος<<ότι 1.αδειάζω() << ' n'?
Ουρά<φλοτέρ>>αυτό2?
κόστος<<αυτό2.αδειάζω() << ' n'?

Η έξοδος είναι:

0
1

Τροποποιητές ουράς

ποπ ()

Μια ουρά είναι FIFO, οπότε κάθε στοιχείο που πρέπει να αφαιρεθεί πρέπει να αφαιρεθεί από το επάνω μέρος (κεφαλή) της ουράς. Αυτή η συνάρτηση μέλους αφαιρεί το πρώτο στοιχείο χωρίς να το επιστρέψει. Ο παρακάτω κώδικας το δείχνει αυτό:

Ουρά<φλοτέρ>>ότι({1.1, 2.2, 3.3, 4.4, 5.5})?
κόστος<<ότι.εμπρός() << ' n'?
ότι.κρότος()?
κόστος<<ότι.Μέγεθος() << ' n'?

Η έξοδος είναι:

1.1
4

a.swap (β)

Δύο ουρές μπορούν να αλλάξουν, όπως απεικονίζεται σε αυτό το τμήμα κώδικα:

Ουρά<φλοτέρ>>ότι 1({1.1, 2.2, 3.3, 4.4, 5.5})?
Ουρά<φλοτέρ>>αυτό2({10, είκοσι})?
ότι 1.ανταλαγή(αυτό2)?
κόστος<< «Πρώτο στοιχείο και μέγεθος que1:
'
<<ότι 1.εμπρός() <<','<<ότι 1.Μέγεθος() << ' n'?
κόστος<< 'Πρώτο στοιχείο και μέγεθος que2'<<
αυτό2.εμπρός() <<','<<αυτό2.Μέγεθος() << ' n'?

Η έξοδος είναι:

Πρώτο στοιχείο και μέγεθος que1: 10, 2

Πρώτο στοιχείο και μέγεθος que2: 1.1, 5

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

Equality and Relational Operators for Queues

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

Χειριστές Ισότητας

Επιστρέφει 1 για true και 0 για false.

Ο == Τελεστής

Επιστρέφει 1 εάν οι δύο ουρές έχουν το ίδιο μέγεθος και τα αντίστοιχα στοιχεία είναι ίσα. αλλιώς επιστρέφει 0. Παράδειγμα:

Ουρά<const απανθρακώνω*>ότι 1({'είδος', 'κάτι άλλο'})?
Ουρά<const απανθρακώνω*>αυτό2({'κακός'})?
intσε ένα=ότι 1==αυτό2?
κόστος<<σε ένα<< ' n'?

Η έξοδος είναι: 0.

Ο! = Τελεστής

- αντίθετα από τα παραπάνω. Παράδειγμα:

Ουρά<const απανθρακώνω*>ότι 1({'είδος', 'κάτι άλλο'})?
Ουρά<const απανθρακώνω*>αυτό2({'κακός'})?
intσε ένα=ότι 1! = =αυτό2?
κόστος<<σε ένα<< ' n'?

Η έξοδος είναι: 1.

Σχετικοί χειριστές

Επιστρέφει 1 για true και 0 για false.

ο

Επιστρέφει 1 εάν η πρώτη ουρά είναι το αρχικό υποσύνολο της δεύτερης ουράς, με τα στοιχεία των δύο ίσων μερίδων να είναι ίδια και με την ίδια σειρά. Εάν και οι δύο ουρές είναι του ίδιου μεγέθους ή διαφορετικών μεγεθών και μετακινούνται από αριστερά προς τα δεξιά, συναντάται ένα στοιχείο στην πρώτη ουρά που είναι μικρότερο από το αντίστοιχο στοιχείο στη δεύτερη ουρά, τότε το 1 εξακολουθεί να επιστρέφεται. Διαφορετικά επιστρέφεται το 0. Παράδειγμα:

Ουρά<const απανθρακώνω*>ότι 1({'είδος', 'κάτι άλλο'})?
Ουρά<const απανθρακώνω*>αυτό2({'κακός'})?
intσε ένα=ότι 1<αυτό2?
κόστος<<σε ένα<< ' n'?

Η έξοδος είναι 1.

Ο> Χειριστής

- αντίθετα από τα παραπάνω. Παράδειγμα:

Ουρά<const απανθρακώνω*>ότι 1({'είδος', 'κάτι άλλο'})?
Ουρά<const απανθρακώνω*>αυτό2({'κακός'})?
intσε ένα=ότι 1>>αυτό2?
κόστος<<σε ένα<< ' n'?

Έξοδος: 0

ο<= Operator

- το ίδιο με Ουρά<const απανθρακώνω*>ότι 1({'είδος', 'κάτι άλλο'})?
Ουρά<const απανθρακώνω*>αυτό2({'κακός'})?
intσε ένα=ότι 1<=αυτό2?
κόστος<<σε ένα<< ' n'?

Έξοδος: 1

Ο> = Χειριστής

- αντίθετα από τα παραπάνω. Παράδειγμα:

Ουρά<const απανθρακώνω*>ότι 1({'είδος', 'κάτι άλλο'})?
Ουρά<const απανθρακώνω*>αυτό2({'κακός'})?
intσε ένα=ότι 1> =αυτό2?
κόστος<<σε ένα<< ' n'?

Έξοδος: 0

Η τάξη και τα τεκμηριωμένα αντικείμενά της

Μια τιμή είναι για έναν τύπο δεδομένων, όπως ένα στιγμιαίο αντικείμενο είναι για μια κλάση. Η κατασκευή ουράς μπορεί επίσης να δεχτεί μια κλάση ως τύπο δεδομένων. Το παρακάτω πρόγραμμα το δείχνει:

#περιλαμβάνω
#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?
τάξη TheCla
{
δημόσιο:
intσε ένα?
στατικός απανθρακώνωκεφ?
κενόςλειτουργία(απανθρακώνωόχι, const απανθρακώνω *Π)
{
κόστος<< 'Υπάρχουν ' <<σε ένα<< 'αξίζει βιβλία' <<όχι<<Π<< ' στο μαγαζί.' << ' n'?
}
στατικός κενόςδιασκέδαση(απανθρακώνωκεφ)
{
αν (κεφ== 'προς το')
κόστος<< «Επίσημη λειτουργία στατικών μελών» << ' n'?
}
}?
intκύριος()
{
TheCla obj1?TheCla obj2?TheCla obj3?TheCla obj4?TheCla obj5?
Ουρά<TheCla>>ότι?
ότι.Σπρώξτε(obj1)?ότι.Σπρώξτε(obj2)?ότι.Σπρώξτε(obj3)?ότι.Σπρώξτε(obj4)?ότι.Σπρώξτε(obj5)?
κόστος<<ότι.Μέγεθος() << ' n'?
ΕΠΙΣΤΡΟΦΗ 0?
}

Η έξοδος είναι 5.

Συνδεδεμένη Λίστα

Η λίστα ουρών ονομάζεται τεχνικά συνδεδεμένη λίστα. Υπάρχουν δύο τύποι συνδεδεμένων λιστών για την ουρά: μεμονωμένα συνδεδεμένη λίστα και διπλά συνδεδεμένη λίστα.

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

Ένα διπλά συνδεδεμένο στοιχείο λίστας μπορεί να εφαρμοστεί από μια δομή τριών μελών. Το μεσαίο μέλος κρατά το δεδομένο, ενώ το πρώτο και το τρίτο μέλος κρατούν δείκτες στα παρακείμενα στοιχεία τους.

Εφαρμογές της ουράς

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

Κοινή χρήση πόρων υπολογιστή

Ένας πόρος σε έναν υπολογιστή είναι οποιοδήποτε φυσικό ή εικονικό στοιχείο περιορισμένης διαθεσιμότητας. Περιλαμβάνουν CPU, κάρτα βίντεο, σκληρό δίσκο και μνήμη. Η κοινή χρήση ενός τέτοιου πόρου χρειάζεται ουρά.

Διαχείριση διακοπών

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

Διαχείριση πληροφοριών.

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

συμπέρασμα

Μια ουρά είναι μια δομή δεδομένων λίστας, η οποία είναι είτε μια μεμονωμένα συνδεδεμένη λίστα είτε μια διπλά συνδεδεμένη λίστα. Κατά κανόνα, το πρώτο στοιχείο που μπαίνει στη λίστα είναι το πρώτο στοιχείο που βγαίνει. Το C ++ παρέχει δομή δεδομένων ουράς στην τυπική βιβλιοθήκη του. Οι κατηγορίες των λειτουργιών μελών και των τελεστών που είναι διαθέσιμες για αυτήν τη δομή είναι η κατασκευή ουρών, η πρόσβαση στοιχείων ουράς, η χωρητικότητα ουράς, οι τροποποιητές ουρών και οι υπερφορτωμένοι χειριστές ουρών.

Οποιαδήποτε δομή δεδομένων ουράς πρέπει να παρέχει τουλάχιστον τις λειτουργίες μελών push () και pop (). push () σημαίνει, αποστολή ενός νέου στοιχείου στο πίσω μέρος της ουράς. και pop () σημαίνει, αφαίρεση του στοιχείου που βρίσκεται στο μπροστινό μέρος της ουράς. Δυστυχώς, στο C ++, αυτές οι συναρτήσεις δεν επιστρέφουν την τιμή που πιέζεται ή εμφανίζεται. Έτσι, για να γνωρίζετε το τελευταίο στοιχείο πριν από το σπρώξιμο, πρέπει να χρησιμοποιήσετε τη λειτουργία επιπλέον back (). και για να γνωρίζετε το πρώτο στοιχείο πριν από την εμφάνιση, πρέπει να χρησιμοποιήσετε τη συνάρτηση extra front ().

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

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

Chrys