Τι είναι το std :: stack;
Μια στοίβα είναι μια δομή δεδομένων που λειτουργεί με βάση την τεχνική LIFO (Last In First Out). Η std :: stack επιτρέπει την προσθήκη και αφαίρεση στοιχείων από το ένα άκρο μόνο.
Η κλάση std :: stack είναι ένας προσαρμογέας κοντέινερ. Τα αντικείμενα κοντέινερ διατηρούν δεδομένα παρόμοιου τύπου δεδομένων. Μπορείτε να δημιουργήσετε μια στοίβα από διάφορα κοντέινερ ακολουθίας. Εάν δεν παρέχεται δοχείο, το deque container θα χρησιμοποιηθεί από προεπιλογή. Οι προσαρμογείς κοντέινερ δεν υποστηρίζουν επαναληπτικούς, επομένως δεν μπορούν να χρησιμοποιηθούν για χειρισμό δεδομένων.
Σε αυτό το σεμινάριο C ++, θα μάθετε
- Τι είναι το std :: stack;
- Σύνταξη στοίβας
- Τύποι μελών
- Λειτουργίες στο Stack
- Εφαρμογή στοίβας
- push () και pop ()
- κενό (), μέγεθος (), επάνω ()
- emplace () και ανταλλαγή ()
- Στοίβα σε STL
Σύνταξη στοίβας
Για να δημιουργήσουμε μια στοίβα, πρέπει να συμπεριλάβουμε το αρχείο κεφαλίδας
template> class stack;
- Type - είναι ο τύπος του στοιχείου που περιέχεται στο std :: stack. Μπορεί να είναι οποιοσδήποτε έγκυρος τύπος C ++ ή ακόμα και ένας τύπος που καθορίζεται από το χρήστη.
- Container - είναι ο τύπος του υποκείμενου αντικειμένου κοντέινερ.
Τύποι μελών
Εδώ είναι οι τύποι μελών στοίβας:
- value_type- Η πρώτη παράμετρος προτύπου, T. Δηλώνει τους τύπους στοιχείων.
- container_type- Η δεύτερη παράμετρος προτύπου, Container. Δηλώνει τον υποκείμενο τύπο κοντέινερ.
- size_type- Μη υπογεγραμμένος ακέραιος τύπος.
Λειτουργίες στο Stack
Μια στοίβα C ++ υποστηρίζει τις ακόλουθες βασικές λειτουργίες:
- push - Προσθέτει / ωθεί ένα στοιχείο στη στοίβα.
- pop - Αφαιρεί / αναδύει ένα στοιχείο από τη στοίβα.
- peek - Επιστρέφει το κορυφαίο στοιχείο της στοίβας χωρίς να το αφαιρέσετε.
- isFull - Ελέγχει εάν μια στοίβα είναι γεμάτη.
- isEmpty - Ελέγχει εάν μια στοίβα είναι κενή.
Εφαρμογή στοίβας
Βήμα 1) Αρχικά έχουμε μια κενή στοίβα. Η κορυφή μιας κενής στοίβας έχει οριστεί σε -1.
Βήμα 2) Στη συνέχεια, έχουμε ωθήσει το στοιχείο 5 στη στοίβα. Το πάνω μέρος της στοίβας θα δείχνει στο στοιχείο 5.
Βήμα 3) Στη συνέχεια, έχουμε ωθήσει το στοιχείο 50 στη στοίβα. Το πάνω μέρος της στοίβας μετατοπίζεται και δείχνει το στοιχείο 50.
Βήμα 4) Στη συνέχεια πραγματοποιήσαμε μια ποπ λειτουργία, αφαιρώντας το επάνω στοιχείο από τη στοίβα. Το στοιχείο 50 βγαίνει από τη στοίβα. Το πάνω μέρος της στοίβας δείχνει τώρα το στοιχείο 5.
push () και pop ()
Οι λειτουργίες stack :: push () προσθέτουν νέο στοιχείο στην κορυφή της στοίβας. Το μέγεθος της στοίβας αυξάνεται κατά 1 μετά την εισαγωγή. Η συνάρτηση παίρνει αυτήν τη σύνταξη:
stack.push(value)
Η τιμή είναι το στοιχείο που θα εισαχθεί στη στοίβα.
Η συνάρτηση stack :: pop () αφαιρεί το επάνω στοιχείο της στοίβας. Αυτό είναι το νεότερο στοιχείο της στοίβας. Το μέγεθος της στοίβας μειώνεται κατά 1 μετά την αφαίρεση. Εδώ είναι η σύνταξη της συνάρτησης:
stack.pop()
Η συνάρτηση δεν λαμβάνει παραμέτρους.
Παράδειγμα 1:
#include#include using namespace std;int main() {stack st;st.push(10);st.push(20);st.push(30);st.push(40);st.pop();st.pop();while (!st.empty()) {cout << ' ' << st.top();st.pop();}}
Παραγωγή:
Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας στοίβας στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
- Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος πρέπει να προστεθεί σε αυτήν τη συνάρτηση.
- Δημιουργήστε μια στοίβα st για να αποθηκεύσετε ακέραιες τιμές.
- Χρησιμοποιήστε τη λειτουργία push () για να εισαγάγετε την τιμή 10 στη στοίβα.
- Χρησιμοποιήστε τη λειτουργία push () για να εισαγάγετε την τιμή 20 στη στοίβα.
- Χρησιμοποιήστε τη λειτουργία push () για να εισαγάγετε την τιμή 30 στη στοίβα.
- Χρησιμοποιήστε τη λειτουργία push () για να εισαγάγετε την τιμή 40 στη στοίβα.
- Χρησιμοποιήστε τη συνάρτηση pop () για να αφαιρέσετε το επάνω στοιχείο από τη στοίβα, δηλαδή 40. Το κορυφαίο στοιχείο γίνεται τώρα 30.
- Χρησιμοποιήστε τη συνάρτηση pop () για να αφαιρέσετε το επάνω στοιχείο από τη στοίβα, δηλαδή, 30. Το κορυφαίο στοιχείο γίνεται πλέον 20.
- Χρησιμοποιήστε μια λειτουργία loop loop και κενό () για να ελέγξετε εάν η στοίβα ΔΕΝ είναι άδεια Ο ! είναι ο τελεστής ΔΕΝ.
- Εκτύπωση των τρεχόντων περιεχομένων της στοίβας στην κονσόλα.
- Καλέστε τη λειτουργία pop () στη στοίβα.
- Τέλος του σώματος του βρόχου while.
- Τέλος του κύριου () σώματος λειτουργίας.
κενό (), μέγεθος (), επάνω ()
Οι στοίβες έχουν ενσωματωμένες λειτουργίες που μπορείτε να χρησιμοποιήσετε για να παίξετε με τη στοίβα και τις τιμές της. Αυτά περιλαμβάνουν:
- κενό () - ελέγχει εάν μια στοίβα είναι κενή ή όχι.
- size () - επιστρέφει το μέγεθος της στοίβας, δηλαδή τον αριθμό των στοιχείων σε μια στοίβα.
- top () - έχει πρόσβαση στο στοιχείο στοίβας στην κορυφή.
Παράδειγμα 2:
#include#include using namespace std;void createStack(stack mystack){stack ms = mystack;while (!ms.empty()){cout << '\t' << ms.top();ms.pop();}cout << '\n';}int main(){stack st;st.push(32);st.push(21);st.push(39);st.push(89);st.push(25);cout << "The stack st is: ";createStack(st);cout << "\n st.size() : " << st.size();cout << "\n st.top() : " << st.top();cout << "\n st.pop() : ";st.pop();createStack(st);return 0;}
Παραγωγή:
Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας στοίβας στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το std namespace στο πρόγραμμά μας για να χρησιμοποιήσετε τις τάξεις του χωρίς να το καλέσετε.
- Δημιουργήστε τη συνάρτηση createStack που μπορούμε να χρησιμοποιήσουμε για να δημιουργήσουμε τη στοίβα mystack. Η στοίβα θα περιέχει ένα σύνολο ακέραιων αριθμών.
- Η αρχή του σώματος της συνάρτησης createStack.
- Δημιουργήστε μια παρουσία του τύπου δεδομένων mystack και δώστε του το όνομα ms.
- Χρησιμοποιήστε τη λειτουργία while loop και το κενό () για να ελέγξετε εάν η στοίβα είναι κενή.
- Η αρχή του σώματος του while loop.
- Χρησιμοποιήστε τη συνάρτηση top () που είναι αποθηκευμένη στο πάνω μέρος της στοίβας. Ο χαρακτήρας \ t θα δημιουργήσει μια νέα καρτέλα.
- Χρησιμοποιήστε τη συνάρτηση pop () για να διαγράψετε το στοιχείο στο πάνω μέρος της στοίβας.
- Τέλος του σώματος του βρόχου while.
- Εκτυπώστε μια κενή γραμμή στην κονσόλα.
- Τέλος του σώματος της συνάρτησης createStack.
- Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος θα πρέπει να προστεθεί στο σώμα της κύριας συνάρτησης ().
- Η αρχή του σώματος της κύριας λειτουργίας ().
- Δημιουργήστε ένα αντικείμενο στοίβας st.
- Χρησιμοποιήστε τη λειτουργία push () για να εισαγάγετε το στοιχείο 32 στη στοίβα.
- Χρησιμοποιήστε τη λειτουργία push () για να εισαγάγετε το στοιχείο 21 στη στοίβα.
- Χρησιμοποιήστε τη λειτουργία ώθησης () για να εισαγάγετε το στοιχείο 39 στη στοίβα.
- Χρησιμοποιήστε τη λειτουργία push () για να εισαγάγετε το στοιχείο 89 στη στοίβα.
- Χρησιμοποιήστε τη λειτουργία push () για να εισαγάγετε το στοιχείο 25 στη στοίβα.
- Εκτυπώστε λίγο κείμενο στην κονσόλα.
- Καλέστε τη συνάρτηση createStack για να εκτελέσετε τις παραπάνω λειτουργίες εισαγωγής στη στοίβα.
- Εκτυπώστε το μέγεθος της στοίβας στην κονσόλα μαζί με άλλο κείμενο.
- Εκτυπώστε το στοιχείο στο επάνω μέρος της στοίβας στην κονσόλα.
- Εκτυπώστε λίγο κείμενο στην κονσόλα.
- Διαγράψτε το στοιχείο στο επάνω μέρος της στοίβας. Στη συνέχεια θα επιστρέψει τα στοιχεία που παραμένουν στη στοίβα.
- Καλέστε τη συνάρτηση createStack για να εκτελέσετε τις παραπάνω λειτουργίες.
- Το πρόγραμμα πρέπει να επιστρέψει την τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του κυρίως σώματος της λειτουργίας ().
emplace () και ανταλλαγή ()
Αυτές είναι άλλες ενσωματωμένες λειτουργίες στοίβας:
- emplace () - κατασκευάζει στη συνέχεια εισάγει νέο στοιχείο στην κορυφή της στοίβας.
- swap () - ανταλλάσσει περιεχόμενο στοίβας με περιεχόμενο άλλης στοίβας.
Παράδειγμα 3:
#include#include #include using namespace std;int main() {stack st1;stack st2;st1.emplace(12);st1.emplace(19);st2.emplace(20);st2.emplace(23);st1.swap(st2);cout << "st1 = ";while (!st1.empty()) {cout << st1.top() << " ";st1.pop();}cout << endl << "st2 = ";while (!st2.empty()) {cout << st2.top() << " ";st2.pop();}}
Παραγωγή:
Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας στοίβας στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας cstdlib στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
- Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος θα προστεθεί στο σώμα αυτής της λειτουργίας.
- Δηλώστε μια στοίβα με όνομα st1 για αποθήκευση ακέραιων τιμών.
- Δηλώστε μια στοίβα με όνομα st2 για αποθήκευση ακέραιων τιμών.
- Χρησιμοποιήστε τη συνάρτηση emplace () για να εισαγάγετε τον ακέραιο αριθμό 12 στη στοίβα που ονομάζεται st1.
- Χρησιμοποιήστε τη συνάρτηση emplace () για να εισαγάγετε τον ακέραιο 19 στη στοίβα που ονομάζεται st1.
- Χρησιμοποιήστε τη συνάρτηση emplace () για να εισαγάγετε τον ακέραιο 20 στη στοίβα που ονομάζεται st2.
- Χρησιμοποιήστε τη συνάρτηση emplace () για να εισαγάγετε τον ακέραιο αριθμό 23 στη στοίβα που ονομάζεται st2.
- Χρησιμοποιήστε τη λειτουργία ανταλλαγής () για να αλλάξετε το περιεχόμενο των δύο στοίβων, st1 και st2. Τα περιεχόμενα της στοίβας st1 πρέπει να μετακινηθούν στη στοίβα st2. Τα περιεχόμενα της στοίβας st2 πρέπει να μετακινηθούν στη στοίβα st1.
- Εκτυπώστε λίγο κείμενο στην κονσόλα.
- Χρησιμοποιήστε τη δήλωση while και τη λειτουργία κενό () για να ελέγξετε εάν η στοίβα st1 δεν είναι κενή.
- Εκτυπώστε τα περιεχόμενα της στοίβας st1 στην κονσόλα. Το "" προσθέτει χώρο μεταξύ των στοιχείων στοίβας κατά την εκτύπωση τους στην κονσόλα.
- Εκτελέστε τη λειτουργία pop () στη στοίβα st1 για να αφαιρέσετε το επάνω στοιχείο.
- Τέλος του σώματος της δήλωσης while.
- Εκτυπώστε λίγο κείμενο στην κονσόλα. Το endl είναι μια λέξη-κλειδί C ++ για την τελική γραμμή. Μετακινεί το δρομέα του ποντικιού στην επόμενη γραμμή για να ξεκινήσει η εκτύπωση από εκεί.
- Χρησιμοποιήστε τη δήλωση while και τη λειτουργία κενό () για να ελέγξετε εάν η στοίβα st2 δεν είναι κενή.
- Εκτυπώστε τα περιεχόμενα της στοίβας st2 στην κονσόλα. Το "" προσθέτει χώρο μεταξύ των στοιχείων στοίβας κατά την εκτύπωση τους στην κονσόλα.
- Εκτελέστε τη λειτουργία pop () στη στοίβα st2 για να αφαιρέσετε το επάνω στοιχείο.
- Τέλος του σώματος της δήλωσης while.
- Τέλος του σώματος της κύριας () συνάρτησης.
Στοίβα σε STL
Το STL (Standard Template Library) συνοδεύεται από κλάσεις προτύπων που παρέχουν κοινές δομές δεδομένων C ++. Επομένως, μια στοίβα μπορεί επίσης να εφαρμοστεί στο STL. Απλώς συμπεριλαμβάνουμε αυτήν τη βιβλιοθήκη στον κώδικα μας και τη χρησιμοποιούμε για να ορίσουμε μια στοίβα.
stackst;
Η παραπάνω σύνταξη δηλώνει μια στοίβα st σε στοιχεία του τύπου δεδομένων T.
Παράδειγμα 3:
#include#include #include using namespace std;int main() {stack st;st.push(12);st.push(19);st.push(20);cout << st.top();cout << st.size();}
Παραγωγή:
Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας στοίβας στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας cstdlib στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
- Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της λειτουργίας.
- Δηλώστε μια στοίβα st για να αποθηκεύσετε ακέραια δεδομένα.
- Προσθέστε το στοιχείο 12 στη στοίβα.
- Προσθέστε το στοιχείο 19 στη στοίβα.
- Προσθέστε το στοιχείο 20 στη στοίβα.
- Εκτυπώστε το στοιχείο στο επάνω μέρος της στοίβας στην κονσόλα.
- Εκτυπώστε το μέγεθος της στοίβας στην κονσόλα.
- Τέλος του σώματος της κύριας συνάρτησης ().
Περίληψη:
- Μια στοίβα είναι μια δομή δεδομένων που λειτουργεί με βάση την τεχνική LIFO (Last In first Out).
- Η στοίβα std :: επιτρέπει μόνο την προσθήκη και αφαίρεση στοιχείων από το ένα άκρο.
- Η κλάση std :: stack είναι ένας προσαρμογέας κοντέινερ, που κρατά στοιχεία παρόμοιου τύπου δεδομένων.
- Μια στοίβα μπορεί να δημιουργηθεί από διάφορα δοχεία ακολουθίας.
- Εάν δεν παρέχετε ένα δοχείο, το deque container θα χρησιμοποιηθεί από προεπιλογή.
- Η λειτουργία push () είναι για την εισαγωγή αντικειμένων στη στοίβα.
- Η συνάρτηση pop () είναι για την αφαίρεση του κορυφαίου στοιχείου από το βήμα.
- Η κενή () συνάρτηση είναι για τον έλεγχο εάν μια στοίβα είναι κενή ή όχι.