
Stog je struktura podataka Last In, First Out (LIFO), što znači da će posljednja stavka dodana u stog biti prva koja će biti uklonjena. Ovo ponašanje je korisno u mnogim kontekstima programiranja, kao što je podudaranje zagrada, evaluacija izraza ili čak praćenje steka poziva programa. Udubimo se u implementaciju i upotrebu steka znakova u Javi.
Kreiranje hrpe znakova
U Javi, klasa Stack koju pruža paket java.util može se koristiti za kreiranje steka znakova. Evo jednostavnog primjera kako deklarirati stek znakova i izvršiti osnovne operacije poput guranja, izvlačenja i pregledavanja:
import java.util.Stack;
public class CharStack {
public static void main(String[] args) {
Stack<Character> stack = new Stack<>();
// Push characters onto the stack
stack.push('A');
stack.push('B');
stack.push('C');
// Pop and peek characters from the stack
System.out.println(stack.pop());
System.out.println(stack.peek());
}
}
Upotreba skupa znakova za rješavanje problema
Stogovi znakova su posebno korisni za rješavanje problema koji uključuju manipulaciju nizovima ili zahtijevaju praćenje ugniježđenih elemenata. Kao primjer, razmotrite problem provjere da li je dati niz zagrada uravnotežen.
Niz se smatra uravnoteženim ako:
- Svaka početna zagrada ima odgovarajuću završnu zagradu
- Parovi zagrada su pravilno ugniježđeni
Možemo koristiti skup znakova da efikasno riješimo ovaj problem sa sljedećim koracima:
1. Inicijalizirajte prazan snop znakova
2. Prođite kroz svaki znak u ulaznom nizu
3. Ako je znak početna zagrada, gurnite ga na stog
4. Ako je znak završna zagrada, provjerite da li je stog prazan i iskočite gornji element ako je to odgovarajuća početna zagrada
5. Ako stog nije prazan nakon obrade svih znakova, niz je neuravnotežen
Evo Java koda za gornju proceduru:
public static boolean isBalanced(String input) {
Stack<Character> stack = new Stack<>();
for (char c : input.toCharArray()) {
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
} else if (c == ')' || c == '}' || c == ']') {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {
return false;
}
}
}
return stack.isEmpty();
}
Razumijevanjem i korištenjem strukture podataka steka, možemo efikasno rješavati složene programske probleme poput onih koji uključuju manipulaciju stringovima, parsiranje i analizu sintakse. Štaviše, s klasom Stack dostupnom u paketu java.util , implementacija i korištenje stekova znakova u Javi postaje praktičan poduhvat.