java stack tutorial stack class implementation with examples
Αυτό το σεμινάριο εξηγεί τι είναι Stack σε Java, Java Stack Class, Stack API Methods, Stack Implementation χρησιμοποιώντας Array & Linked List με τη βοήθεια παραδειγμάτων:
Μια στοίβα είναι μια δομημένη δομή δεδομένων που ανήκει στο Java Collection Framework. Σε αυτήν τη συλλογή, τα στοιχεία προστίθενται και αφαιρούνται μόνο από το ένα άκρο. Το τέλος στο οποίο τα στοιχεία προστίθενται και αφαιρούνται ονομάζεται 'Top of the Stack'.
Καθώς η προσθήκη και η διαγραφή γίνονται μόνο στο ένα άκρο, το πρώτο στοιχείο που προστίθεται στη στοίβα είναι το τελευταίο στοιχείο που αφαιρείται από τη στοίβα. Έτσι η στοίβα ονομάζεται δομή δεδομένων LIFO (Last-in, First-out).
=> Ρίξτε μια ματιά στον Οδηγό για αρχάριους Java εδώ
Τι θα μάθετε:
- Συλλογή Java Stack
- συμπέρασμα
Συλλογή Java Stack
Μια εικονογραφική αναπαράσταση της στοίβας δίνεται παρακάτω.
Όπως φαίνεται στην παραπάνω ακολουθία αναπαράστασης, αρχικά η στοίβα είναι κενή και η κορυφή της στοίβας έχει ρυθμιστεί στο -1. Στη συνέχεια ξεκινάμε μια λειτουργία «ώθησης» που χρησιμοποιείται για την προσθήκη ενός στοιχείου στη στοίβα.
Στη δεύτερη αναπαράσταση, πιέζουμε το στοιχείο 10. Σε αυτό το σημείο, η κορυφή αυξάνεται. Πιέζουμε ξανά το στοιχείο 20 στη στοίβα αυξάνοντας έτσι την κορυφή επιπλέον.
Στην τελευταία αναπαράσταση, ξεκινάμε μια λειτουργία «ποπ». Αυτή η λειτουργία χρησιμοποιείται για την αφαίρεση ενός στοιχείου από τη στοίβα. Ένα στοιχείο που δείχνει προς το παρόν 'Κορυφή' αφαιρείται από τη λειτουργία pop.
Μια δομή δεδομένων στοίβας υποστηρίζει τις ακόλουθες λειτουργίες:
- Σπρώξτε: Προσθέτει ένα στοιχείο στη στοίβα. Ως αποτέλεσμα, η τιμή της κορυφής αυξάνεται.
- Κρότος: Ένα στοιχείο αφαιρείται από τη στοίβα. Μετά τη λειτουργία pop, η τιμή της κορυφής μειώνεται.
- Κρυφοκοίταγμα: Αυτή η λειτουργία χρησιμοποιείται για αναζήτηση ή αναζήτηση ενός στοιχείου. Η τιμή της κορυφής δεν τροποποιείται.
Το πάνω μέρος της στοίβας που χρησιμοποιείται ως τέλος για την προσθήκη / αφαίρεση στοιχείων από τη στοίβα μπορεί επίσης να έχει διάφορες τιμές σε μια συγκεκριμένη στιγμή. Εάν το μέγεθος της στοίβας είναι Ν, τότε το επάνω μέρος της στοίβας θα έχει τις ακόλουθες τιμές σε διαφορετικές συνθήκες ανάλογα με την κατάσταση στην οποία βρίσκεται η στοίβα.
Κατάσταση στοίβας | Κορυφαία τιμή |
---|---|
Στοίβα άδειο | -1 |
Ένα στοιχείο στη στοίβα | 0 |
Πλήρης στοίβα | Ν-1 |
Υπερχείλιση (στοιχεία> Ν) | Ν |
Κατηγορία στοίβας σε Java
Το Java Collection Framework παρέχει μια κλάση με το όνομα 'Stack'. Αυτή η κλάση Stack επεκτείνει την κλάση Vector και εφαρμόζει τη λειτουργικότητα της δομής δεδομένων Stack.
Το παρακάτω διάγραμμα δείχνει την ιεραρχία της κατηγορίας Stack.
Όπως φαίνεται στο παραπάνω διάγραμμα, η κλάση Stack κληρονομεί την κλάση Vector η οποία με τη σειρά της εφαρμόζει τη διεπαφή λίστας της διεπαφής συλλογής.
Η τάξη Stack είναι μέρος του πακέτου java.util. Για να συμπεριλάβουμε την τάξη στοίβας στο πρόγραμμα, μπορούμε να χρησιμοποιήσουμε τη δήλωση εισαγωγής ως εξής.
import java.util.*;
ή
import java.util.Stack;
Δημιουργήστε μια στοίβα στην Java
Μόλις εισαγάγουμε την κλάση Stack, μπορούμε να δημιουργήσουμε ένα αντικείμενο Stack όπως φαίνεται παρακάτω:
Stack mystack = new Stack();
Μπορούμε επίσης να δημιουργήσουμε έναν γενικό τύπο αντικειμένου κλάσης Stack ως εξής:
Stack myStack = new Stack;
Εδώ το data_type μπορεί να είναι οποιοσδήποτε έγκυρος τύπος δεδομένων στην Java.
Για παράδειγμα ,μπορούμε να δημιουργήσουμε τα ακόλουθα αντικείμενα κατηγορίας Stack.
Stack stack_obj = new Stack(); Stack str_stack = new Stack();
Μέθοδοι στοίβας API σε Java
Η κλάση Stack παρέχει μεθόδους για προσθήκη, αφαίρεση και αναζήτηση δεδομένων στο Stack. Παρέχει επίσης μια μέθοδο για να ελέγξετε εάν η στοίβα είναι άδεια. Θα συζητήσουμε αυτές τις μεθόδους στην παρακάτω ενότητα.
Λειτουργία Stack Push
Η λειτουργία ώθησης χρησιμοποιείται για να ωθήσει ή να προσθέσει στοιχεία στη στοίβα. Μόλις δημιουργήσουμε μια παρουσία στοίβας, μπορούμε να χρησιμοποιήσουμε τη λειτουργία ώθησης για να προσθέσουμε τα στοιχεία του τύπου αντικειμένου στοίβας στη στοίβα.
Το ακόλουθο κομμάτι κώδικα χρησιμοποιείται για την προετοιμασία μιας ακέραιας στοίβας με τις τιμές.
Stack myStack = new Stack(); myStack.push(10); myStack.push(15); myStack.push(20);
Η αρχική στοίβα που αποκτήθηκε ως αποτέλεσμα της παραπάνω εκτέλεσης κώδικα φαίνεται παρακάτω:
Εάν εκτελέσουμε άλλη λειτουργία push () όπως φαίνεται παρακάτω,
push(25);
Η προκύπτουσα στοίβα θα είναι:
Λειτουργία Stack Pop
Μπορούμε να αφαιρέσουμε το στοιχείο από τη στοίβα χρησιμοποιώντας τη λειτουργία 'pop'. Το στοιχείο που δείχνει η κορυφή προς το παρόν βγαίνει από τη στοίβα.
Το ακόλουθο κομμάτι κώδικα επιτυγχάνει αυτό.
Stack intStack = new Stack(); intStack.push(100); intStack.push(200); int val = intStack.pop();
Η μεταβλητή val θα περιέχει την τιμή 200 καθώς ήταν το τελευταίο στοιχείο που εισήχθη στη στοίβα.
Η αναπαράσταση στοίβας για λειτουργία push και pop είναι η εξής:
Λειτουργία Stack Peek
Η λειτουργία peek επιστρέφει την κορυφή της στοίβας χωρίς να αφαιρέσει το στοιχείο. Στο παραπάνω παράδειγμα στοίβας, το 'intStack.peek ()' θα επιστρέψει 200.
Stack isEmpty Operation
Η λειτουργία isEmpty () της κλάσης Stack ελέγχει εάν το αντικείμενο στοίβας είναι κενό. Επιστρέφει αληθές εάν το Stack δεν έχει στοιχεία σε αυτό αλλιώς επιστρέφει false.
Λειτουργία αναζήτησης στοίβας
Μπορούμε να αναζητήσουμε ένα στοιχείο στη στοίβα χρησιμοποιώντας τη λειτουργία αναζήτησης (). Η λειτουργία αναζήτησης () επιστρέφει το ευρετήριο του στοιχείου που αναζητάται. Αυτός ο δείκτης μετράται από την κορυφή της στοίβας.
Stack intStack = new Stack (); intStack.push (100); intStack.push (200); int index = inStack.search(100); //index will have the value 2.
Μέγεθος στοίβας
Το μέγεθος του αντικειμένου Stack δίνεται από το java.util.Stack.size () μέθοδος. Επιστρέφει τον συνολικό αριθμό στοιχείων στη στοίβα.
Το ακόλουθο παράδειγμα εκτυπώνει το μέγεθος της στοίβας.
Stack myStack = new Stack(); myStack.push(100); myStack.push(200); myStack.push(300); System.out.println('Stack size:' + myStack.size()); //Stack size: 3
Εκτύπωση / Στοιχεία στοίβας Iterate
Μπορούμε να δηλώσουμε έναν επαναληπτικό για το Stack και στη συνέχεια να διασχίσουμε ολόκληρο το Stack χρησιμοποιώντας αυτόν τον επαναληπτικό. Με αυτόν τον τρόπο μπορούμε να επισκεφθούμε και να εκτυπώσουμε κάθε στοιχείο στοίβας ένα προς ένα.
Το παρακάτω πρόγραμμα δείχνει τον τρόπο επανάληψης του Stack χρησιμοποιώντας έναν επαναληπτικό.
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); System.out.println('Stack elements:'); //get an iterator for the stack Iterator iterator = stack.iterator(); //traverse the stack using iterator in a loop and print each element while(iterator.hasNext()){ System.out.print(iterator.next() + ' '); } } }
Παραγωγή:
Στοιχεία στοίβας:
PUNE MUMBAI NASHIK
Στοίβα χρησιμοποιώντας Java 8
Μπορούμε επίσης να εκτυπώσουμε ή να διασχίσουμε τα στοιχεία στοίβας χρησιμοποιώντας λειτουργίες Java 8 όπως Stream API, forEach και forEachRemaining κατασκευές.
Το ακόλουθο πρόγραμμα δείχνει τη χρήση των κατασκευών Java 8 για να διασχίσετε τη στοίβα.
import java.util.*; import java.util.stream.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); System.out.println('Stack elements using Java 8 forEach:'); //get a stream for the stack Stream stream = stack.stream(); //traverse though each stream object using forEach construct of Java 8 stream.forEach((element) -> { System.out.print(element + ' '); // print element }); System.out.println('
Stack elements using Java 8 forEachRemaining:'); //define an iterator for the stack Iterator stackIterator = stack.iterator(); //use forEachRemaining construct to print each stack element stackIterator.forEachRemaining(val -> { System.out.print(val + ' '); }); } }
Παραγωγή:
Στοίβα στοιχεία χρησιμοποιώντας Java 8 forEach:
PUNE MUMBAI NASHIK
Στοίβα στοιχεία χρησιμοποιώντας Java 8 forEachRemaining:
PUNE MUMBAI NASHIK
Εφαρμογή στοίβας σε Java
Το ακόλουθο πρόγραμμα εφαρμόζει τη λεπτομερή στοίβα που δείχνει τις διάφορες λειτουργίες στοίβας.
import java.util.Stack; public class Main { public static void main(String a()){ //declare a stack object Stack stack = new Stack(); //print initial stack System.out.println('Initial stack : ' + stack); //isEmpty () System.out.println('Is stack Empty? : ' + stack.isEmpty()); //push () operation stack.push(10); stack.push(20); stack.push(30); stack.push(40); //print non-empty stack System.out.println('Stack after push operation: ' + stack); //pop () operation System.out.println('Element popped out:' + stack.pop()); System.out.println('Stack after Pop Operation : ' + stack); //search () operation System.out.println('Element 10 found at position: ' + stack.search(10)); System.out.println('Is Stack empty? : ' + stack.isEmpty()); } }
Παραγωγή:
Αρχική στοίβα: ()
Είναι κενή η στοίβα; : αλήθεια
Στοίβα μετά από λειτουργία ώθησης: (10, 20, 30, 40)
Το στοιχείο εμφανίστηκε: 40
Στοίβα μετά από λειτουργία Pop: (10, 20, 30)
Το στοιχείο 10 βρέθηκε στη θέση: 3
Είναι στοίβα άδειο; : λάθος
Στοίβα για συστοιχία στην Ιάβα
Η δομή δεδομένων στοίβας μπορεί να μετατραπεί σε Array χρησιμοποιώντας τη μέθοδο «toArray ()» της κλάσης Stack.
Το παρακάτω πρόγραμμα δείχνει αυτήν τη μετατροπή.
import java.util.*; import java.util.stream.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); //print the stack System.out.println('The Stack contents: ' + stack); // Create the array and use toArray() method to convert stack to array Object() strArray = stack.toArray(); //print the array System.out.println('The Array contents:'); for (int j = 0; j Παραγωγή:
Περιεχόμενα στοίβας: (PUNE, MUMBAI, NASHIK)
Τα περιεχόμενα του Array:
PUNE MUMBAI NASHIK

Εφαρμογή στοίβας σε Java με χρήση συστοιχίας
Η στοίβα μπορεί να εφαρμοστεί χρησιμοποιώντας ένα Array. Όλες οι εργασίες στοίβας πραγματοποιούνται χρησιμοποιώντας έναν πίνακα.
Το παρακάτω πρόγραμμα δείχνει την εφαρμογή Stack χρησιμοποιώντας έναν πίνακα.
import java.util.*; //Stack class class Stack { int top; //define top of stack int maxsize = 5; //max size of the stack int() stack_arry = new int(maxsize); //define array that will hold stack elements Stack(){ //stack constructor; initially top = -1 top = -1; } boolean isEmpty(){ //isEmpty () method return (top <0); } boolean push (int val){ //push () method if(top == maxsize-1) { System.out.println('Stack Overflow !!'); return false; } else { top++; stack_arry(top)=val; return true; } } boolean pop () { //pop () method if (top == -1) { System.out.println('Stack Underflow !!'); return false; } else { System.out.println('
Item popped: ' + stack_arry(top--)); return true; } } void display () { //print the stack elements System.out.println('Printing stack elements .....'); for(int i = top; i>=0;i--) { System.out.print(stack_arry(i) + ' '); } } } public class Main { public static void main(String() args) { //define a stack object Stack stck = new Stack(); System.out.println('Initial Stack Empty : ' + stck.isEmpty()); //push elements stck.push(10); stck.push(20); stck.push(30); stck.push(40); System.out.println('After Push Operation...'); //print the elements stck.display(); //pop two elements from stack stck.pop(); stck.pop(); System.out.println('After Pop Operation...'); //print the stack again stck.display(); } }
Παραγωγή:
Initial Stack Empty: true
Μετά τη λειτουργία ώθησης…
Εκτύπωση στοιχείων στοίβας… ..
40 30 20 10
Εμφανίστηκε το αντικείμενο: 40
Εμφανίστηκε το στοιχείο: 30
Μετά τη λειτουργία Pop…
Εκτύπωση στοιχείων στοίβας… ..
20 10

Εφαρμογή στοίβας χρησιμοποιώντας συνδεδεμένη λίστα
Η στοίβα μπορεί επίσης να εφαρμοστεί χρησιμοποιώντας μια συνδεδεμένη λίστα, όπως ακριβώς κάναμε χρησιμοποιώντας πίνακες. Ένα πλεονέκτημα της χρήσης μιας συνδεδεμένης λίστας για την εφαρμογή στοίβας είναι ότι μπορεί να αναπτυχθεί ή να συρρικνωθεί δυναμικά. Δεν χρειάζεται να έχουμε μέγιστο περιορισμό μεγέθους, όπως σε πίνακες.
Το ακόλουθο πρόγραμμα εφαρμόζει μια συνδεδεμένη λίστα για την εκτέλεση λειτουργιών στοίβας.
import static java.lang.System.exit; // Stack class using LinkedList class Stack_Linkedlist { // Define Node of LinkedList private class Node { int data; // node data Node nlink; // Node link } // top of the stack Node top; // stack class Constructor Stack_Linkedlist() { this.top = null; } // push () operation public void push(int val) { // create a new node Node temp = new Node(); // checks if the stack is full if (temp == null) { System.out.print('
Stack Overflow'); return; } // assign val to node temp.data = val; // set top of the stack to node link temp.nlink = top; // update top top = temp; } // isEmpty () operation public boolean isEmpty() { return top == null; } // peek () operation public int peek() { // check if the stack is empty if (!isEmpty()) { return top.data; } else { System.out.println('Stack is empty!'); return -1; } } // pop () operation public void pop() { // check if stack is out of elements if (top == null) { System.out.print('
Stack Underflow!!'); return; } // set top to point to next node top = (top).nlink; } //print stack contents public void display() { // check for stack underflow if (top == null) { System.out.printf('
Stack Underflow!!'); exit(1); } else { Node temp = top; System.out.println('Stack elements:'); while (temp != null) { // print node data System.out.print(temp.data + '->'); // assign temp link to temp temp = temp.nlink; } } } } public class Main { public static void main(String() args) { // Create a stack class object Stack_Linkedlist stack_obj = new Stack_Linkedlist(); // push values into the stack stack_obj.push(9); stack_obj.push(7); stack_obj.push(5); stack_obj.push(3); stack_obj.push(1); // print Stack elements stack_obj.display(); // print current stack top System.out.println('
Stack top : ' + stack_obj.peek()); // Pop elements twice System.out.println('Pop two elements'); stack_obj.pop(); stack_obj.pop(); // print Stack elements stack_obj.display(); // print new stack top System.out.println('
New Stack top:' + stack_obj.peek()); } }
Παραγωγή:
Στοιχεία στοίβας:
1-> 3-> 5-> 7-> 9->
Στοίβα: 1
Βάλτε δύο στοιχεία
Στοιχεία στοίβας:
5-> 7-> 9->
Νέα κορυφή στοίβας: 5

Συχνές Ερωτήσεις
Q # 1) Τι είναι οι στοίβες στην Java;
Απάντηση: Μια στοίβα είναι μια δομή δεδομένων LIFO (Last in, First out) για την αποθήκευση στοιχείων. Τα στοιχεία στοίβας προστίθενται ή αφαιρούνται από τη στοίβα από το ένα άκρο που ονομάζεται Κορυφή της στοίβας.
Η προσθήκη ενός στοιχείου στη στοίβα γίνεται χρησιμοποιώντας τη λειτουργία Push. Η διαγραφή των στοιχείων γίνεται με τη λειτουργία pop. Στην Java, μια στοίβα υλοποιείται χρησιμοποιώντας την κλάση Stack.
Q # 2) Είναι το Stack μια συλλογή στην Java;
Απάντηση: Ναί. Η στοίβα είναι μια συλλογή παλαιού τύπου στην Java που είναι διαθέσιμη από το API συλλογής στο Java 1.0 και μετά. Η στοίβα κληρονομεί την κλάση Vector της διεπαφής λίστας.
Q # 3) Είναι το Stack μια διεπαφή;
Απάντηση: Η στοίβα διασύνδεσης είναι μια διεπαφή που περιγράφει τη δομή τελευταίας εισόδου, πρώτης εξόδου και χρησιμοποιείται για την αποθήκευση της κατάστασης των αναδρομικών προβλημάτων.
Q # 4) Σε τι χρησιμοποιούνται οι στοίβες;
Απάντηση: Ακολουθούν οι κύριες εφαρμογές της στοίβας:
πώς να ανοίξετε τα αρχεία .jar windows 10
- Αξιολόγηση έκφρασης και μετατροπές: Η στοίβα χρησιμοποιείται για τη μετατροπή των εκφράσεων σε επιδιόρθωση, επίθετο και πρόθεμα. Χρησιμοποιείται επίσης για την αξιολόγηση αυτών των εκφράσεων.
- Η στοίβα χρησιμοποιείται επίσης για την ανάλυση συντακτικών δέντρων.
- Η στοίβα χρησιμοποιείται για τον έλεγχο παρενθέσεων σε μια έκφραση.
- Η στοίβα χρησιμοποιείται για την επίλυση προβλημάτων υποτροπής.
- Οι κλήσεις λειτουργιών αξιολογούνται χρησιμοποιώντας στοίβες.
Q # 5) Ποια είναι τα πλεονεκτήματα του Stack;
Απάντηση: Οι μεταβλητές που αποθηκεύονται στη στοίβα καταστρέφονται αυτόματα όταν επιστρέφονται. Οι στοίβες είναι μια καλύτερη επιλογή όταν η μνήμη κατανέμεται και αφαιρείται. Οι στοίβες καθαρίζουν επίσης τη μνήμη. Εκτός από αυτό οι στοίβες μπορούν να χρησιμοποιηθούν αποτελεσματικά για την αξιολόγηση των εκφράσεων και την ανάλυση των εκφράσεων.
συμπέρασμα
Αυτό ολοκληρώνει το σεμινάριό μας για Stacks in Java. Το Stack class είναι μέρος του API συλλογής και υποστηρίζει λειτουργίες push, pop, peek και search. Τα στοιχεία προστίθενται ή αφαιρούνται στο / από τη στοίβα μόνο στο ένα άκρο. Αυτό το τέλος ονομάζεται κορυφή της στοίβας.
Σε αυτό το σεμινάριο, έχουμε δει όλες τις μεθόδους που υποστηρίζονται από την τάξη στοίβας. Έχουμε επίσης εφαρμόσει τη στοίβα χρησιμοποιώντας πίνακες και συνδεδεμένες λίστες.
Θα συνεχίσουμε με άλλες κατηγορίες συλλογής στα επόμενα σεμινάρια μας.
=> Διαβάστε μέσω της σειράς Easy Java Training
Συνιστώμενη ανάγνωση
- Εκμάθηση Java Reflection με παραδείγματα
- Εκπαιδευτικό μάθημα κλάσης Java Scanner με παραδείγματα
- Τι είναι ένα Java HashTable - Εφαρμογή HashTable & Παράδειγμα
- Τι είναι το Java Java | Java Vector Class Tutorial με παραδείγματα
- Εκπαιδευτικό μάθημα Java Array - java.util.Arrays Class με παραδείγματα
- Βασικά στοιχεία Java: Java Syntax, Java Class και Core Java Concepts
- LinkedHashMap In Java - LinkedHashMap Παράδειγμα & υλοποίηση
- Εκμάθηση Java SWING: Container, Components and Event Handling