java stack tutorial stack class implementation with examples
Ovaj vodič objašnjava što je Stack u Javi, Java Stack Class, Stack API metode, Stack Implementacija pomoću niza i povezanog popisa uz pomoć primjera:
Stog je uređena struktura podataka koja pripada Okviru Java Collection. U ovoj zbirci elementi se dodaju i uklanjaju samo s jednog kraja. Kraj na kojem se dodaju i uklanjaju elementi naziva se 'Top of the Stack'.
Kako se dodavanje i brisanje vrši samo na jednom kraju, prvi element dodan u stog posljednji je element uklonjen iz stoga. Stoga se stog naziva LIFO (Last-in, First-out) strukturom podataka.
=> Ovdje pogledajte Vodič za početnike za Java
Što ćete naučiti:
- Zbirka Java stoga
- Zaključak
Zbirka Java stoga
Slikovni prikaz stoga dat je u nastavku.
Kao što je prikazano u gornjem slijedu prikaza, inicijalno je stog prazan, a vrh stoga postavljen na -1. Tada započinjemo operaciju 'push' koja se koristi za dodavanje elementa u stog.
Dakle, u drugom predstavljanju guramo element 10. U ovom se trenutku vrh povećava. Ponovo gurnemo element 20 u hrpu, čime dodatno povećavamo vrh.
U posljednjem predstavljanju pokrećemo operaciju 'pop'. Ova se operacija koristi za uklanjanje elementa iz stoga. Pop elementom uklanja se element koji je trenutno usmjeren na 'Top'.
Struktura podataka steka podržava sljedeće operacije:
- Gurnuti: Dodaje element u stog. Kao rezultat, vrijednost vrha se povećava.
- Pop: Element se uklanja iz stoga. Nakon pop operacije, vrijednost vrha se smanjuje.
- Zavirite: Ova se operacija koristi za traženje ili traženje elementa. Vrijednost vrha se ne mijenja.
Vrh stoga koji se koristi kao kraj za dodavanje / uklanjanje elemenata iz stoga također u određenom trenutku može imati različite vrijednosti. Ako je veličina stoga N, tada će vrh stoga imati sljedeće vrijednosti pod različitim uvjetima, ovisno o tome u kojem je stanju stog.
Status sloga | Vrhunska vrijednost |
---|---|
Stog prazan | -1 |
Jedan element u stogu | 0 |
Stog pun | N-1 |
Preljev (elementi> N) | N |
Klasa stoga u Javi
Java Collection Framework nudi klasu nazvanu “Stack”. Ova klasa Stack proširuje klasu Vector i provodi funkcionalnost strukture podataka Stack.
Dijagram ispod prikazuje hijerarhiju klase Stack.
Kao što je prikazano na gornjem dijagramu, klasa Stack nasljeđuje klasu Vector koja zauzvrat implementira sučelje popisa sučelja zbirke.
Klasa Stack dio je paketa java.util. Da bismo u program uključili klasu Stack, možemo koristiti naredbu import kao što slijedi.
import java.util.*;
ili
import java.util.Stack;
Stvorite stog u Javi
Nakon što uvezemo klasu Stack, možemo stvoriti objekt Stack kako je prikazano dolje:
Stack mystack = new Stack();
Također možemo stvoriti generički tip objekta klase Stack kako slijedi:
Stack myStack = new Stack;
Ovdje data_type može biti bilo koji valjani tip podataka u Javi.
Na primjer ,možemo stvoriti sljedeće objekte klase Stack.
Stack stack_obj = new Stack(); Stack str_stack = new Stack();
Stack API metode u Javi
Klasa Stack pruža metode za dodavanje, uklanjanje i pretraživanje podataka u stogu. Također pruža metodu za provjeru je li stog prazan. O tim ćemo metodama razgovarati u nastavku.
Slaganje pritiska
Operacija potiskivanja koristi se za guranje ili dodavanje elemenata u stog. Jednom kada stvorimo instancu steka, možemo koristiti operaciju guranja za dodavanje elemenata vrste predmeta steka u stog.
Sljedeći komad koda koristi se za inicijalizaciju cjelobrojnog snopa s vrijednostima.
Stack myStack = new Stack(); myStack.push(10); myStack.push(15); myStack.push(20);
Početni stog dobiven kao rezultat gore navedenog dijela izvršavanja koda prikazan je dolje:
Ako izvedemo još jednu operaciju push () kao što je prikazano u nastavku,
push(25);
Rezultirajući stog bit će:
Stack Pop Operacija
Element možemo ukloniti iz gomile pomoću operacije 'pop'. Element koji trenutno pokazuje gornji dio iskače iz hrpe.
Sljedeći dio koda to postiže.
Stack intStack = new Stack(); intStack.push(100); intStack.push(200); int val = intStack.pop();
Varijabla val sadržavat će vrijednost 200 jer je to zadnji element gurnut u stog.
Prikaz steka za push i pop rad je sljedeći:
Operacija zavirivanja u stog
Operacija zavirivanja vraća vrh stoga bez uklanjanja elementa. U gornjem primjeru stoga, 'intStack.peek ()' vratit će 200.
Stack isPrazan rad
Operacija isEmpty () klase Stack provjerava je li objekt steka prazan. Vraća true ako u stogu nema elemenata, inače vraća false.
Operacija pretraživanja stoga
Možemo tražiti element na stogu pomoću operacije search (). Operacija search () vraća indeks elementa koji se traži. Ovaj se indeks računa od vrha stoga.
Stack intStack = new Stack (); intStack.push (100); intStack.push (200); int index = inStack.search(100); //index will have the value 2.
Veličina gomile
Veličina objekta Stack daje se pomoću java.util.Stack.size () metoda. Vraća ukupan broj elemenata u stogu.
Sljedeći primjer ispisuje veličinu stoga.
Stack myStack = new Stack(); myStack.push(100); myStack.push(200); myStack.push(300); System.out.println('Stack size:' + myStack.size()); //Stack size: 3
Ispis / ponavljanje elemenata sloga
Možemo proglasiti iterator za Stack i zatim se kretati kroz cijeli Stack pomoću ovog iteratora. Na taj način možemo posjetiti i ispisati svaki element steka jedan po jedan.
Sljedeći program pokazuje način iteracije Stacka pomoću iteratora.
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() + ' '); } } }
Izlaz:
Elementi stoga:
PUNE MUMBAI NAŠIK
Slaganje pomoću Java 8
Također možemo ispisivati ili prelaziti elemente stoga pomoću Java 8 značajki poput Stream API-ja, forEach i forEachRemaining konstrukcija.
Sljedeći program prikazuje upotrebu Java 8 konstrukcija za prolazak kroz stog.
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 + ' '); }); } }
Izlaz:
Slažite elemente pomoću Java 8 forEach:
PUNE MUMBAI NAŠIK
Složite elemente pomoću Java 8 forEachRemaining:
PUNE MUMBAI NAŠIK
Implementacija stoga u Javi
Sljedeći program implementira detaljni stog koji prikazuje različite operacije stoga.
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()); } }
Izlaz:
Početni stog: ()
Je li stog prazan? : istina
Slaganje nakon guranja: (10, 20, 30, 40)
Iskočio je element: 40
Stog nakon pop operacije: (10, 20, 30)
Element 10 pronađen na položaju: 3
Je li Stack prazan? : lažno
Slagati u niz u Javi
Struktura podataka steka može se pretvoriti u niz pomoću metode 'toArray ()' klase Stack.
Sljedeći program prikazuje ovu pretvorbu.
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 Izlaz:
Sadržaj stoga: (PUNE, MUMBAI, NASHIK)
Sadržaj niza:
PUNE MUMBAI NAŠIK

java konstruira niz objekata s konstruktorom
Implementacija stoga u Javi pomoću niza
Stog se može implementirati pomoću niza. Sve operacije slaganja izvode se pomoću niza.
Program u nastavku prikazuje implementaciju Stacka pomoću niza.
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(); } }
Izlaz:
Početni stog prazan: true
Nakon push operacije ...
Ispis složenih elemenata ... ..
40 30 20 10
Iskočen predmet: 40
Predmet je iskočio: 30
Nakon pop operacije ...
Ispis složenih elemenata ... ..
20 10

Provedba stoga pomoću povezanog popisa
Stog se također može implementirati pomoću povezanog popisa, baš kao što smo to učinili koristeći nizove. Jedna od prednosti korištenja povezanog popisa za implementaciju stoga je ta što on može dinamički rasti ili se smanjivati. Ne trebamo imati ograničenje maksimalne veličine kao u nizovima.
Sljedeći program implementira povezani popis za izvođenje operacija stoga.
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()); } }
Izlaz:
Elementi stoga:
1-> 3-> 5-> 7-> 9->
Stack top: 1
Pop dva elementa
Elementi stoga:
5-> 7-> 9->
Novi vrh stoga: 5

Često postavljana pitanja
P # 1) Što su stogovi u Javi?
Odgovor: Stog je LIFO (zadnji ulaz, prvi izlaz) struktura podataka za pohranu elemenata. Elementi stoga dodaju se ili uklanjaju iz stoga s jednog kraja koji se naziva Vrh stoga.
Dodavanje elementa u stog vrši se pomoću operacije Push. Brisanje elemenata vrši se pomoću pop operacije. U Javi se stog implementira pomoću klase Stack.
P # 2) Je li Stack kolekcija u Javi?
Odgovor: Da. Stog je naslijeđena kolekcija na Javi koja je dostupna od API-ja za zbirku u Javi 1.0 nadalje. Stack nasljeđuje klasu Vector sučelja List.
P # 3) Je li Stack sučelje?
Odgovor: Sklop sučelja sučelje je koje opisuje strukturu posljednjeg ulaza i prvog korištenja i koristi se za pohranu stanja rekurzivnih problema.
P # 4) Za što se koriste stekovi?
Odgovor: Slijede glavne primjene stoga:
- Procjena izraza i pretvorbe: Stog se koristi za pretvaranje izraza u postfix, infix i prefix. Također se koristi za vrednovanje ovih izraza.
- Stog se također koristi za raščlanjivanje sintaksnih stabala.
- Stog se koristi za provjeru zagrada u izrazu.
- Stog se koristi za rješavanje problema vraćanja unatrag.
- Pozivi funkcija procjenjuju se pomoću skupova.
P # 5) Koje su prednosti stoga?
Odgovor: Varijable pohranjene u stogu automatski se uništavaju kad se vrate. Stogovi su bolji izbor kada se memorija dodjeljuje i oslobađa. Snopovi također čiste memoriju. Osim toga, stogovi se mogu učinkovito koristiti za procjenu izraza i raščlambu izraza.
Zaključak
Ovim je dovršen naš vodič o stekovima u Javi. Klasa steka dio je API-ja za prikupljanje i podržava push, pop, peek i operacije pretraživanja. Elementi se dodaju ili uklanjaju u / iz stoga samo na jednom kraju. Taj se kraj naziva vrhom stoga.
U ovom uputstvu vidjeli smo sve metode podržane od klase steka. Također smo implementirali stog pomoću polja i povezanih popisa.
Nastavit ćemo s ostalim tečajevima sakupljanja u našim sljedećim vodičima.
=> Pročitajte seriju Easy Training Training
Preporučena literatura
- Java Vodič za refleksiju s primjerima
- Vodič za razred Java Scannera s primjerima
- Što je Java HashTable - Implementacija i primjer HashTablea
- Što je Java Vector | Vodič za Java Vector Class s primjerima
- Java Array Class Tutorial - java.util.Arrays Class s primjerima
- Osnove Java-a: Java sintaksa, Java Class i osnovni Java koncepti
- LinkedHashMap u Javi - Primjer i implementacija LinkedHashMap
- Java SWING Vodič: Spremnici, komponente i upravljanje događajima