Sobes.tech
Intern

Wat zijn stacks?

sobes.tech AI

Antwoord van AI

Een stack is een gegevensstructuur die volgens het LIFO-principe (Last-In, First-Out) werkt. Elementen worden alleen aan één uiteinde toegevoegd en verwijderd, dat wordt de top van de stack genoemd.

Belangrijkste operaties:

  • push: een element aan de top van de stack toevoegen.
  • pop: een element van de top van de stack verwijderen en teruggeven.
  • peek: de waarde van het element aan de top van de stack bekijken zonder het te verwijderen.
  • isEmpty: controleren of de stack leeg is.

In Java wordt de stack voorgesteld door de klasse Stack, die een subklasse is van Vector.

// Voorbeeld van gebruik van Stack
import java.util.Stack;

public class StackExample {

    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();

        stack.push("Eerste"); // Elementen toevoegen
        stack.push("Tweede");
        stack.push("Derde");

        System.out.println("Top van de stack: " + stack.peek()); // Bekijk het bovenste element

        while (!stack.empty()) { // Zolang de stack niet leeg is
            System.out.println("Verwijderen: " + stack.pop()); // Elementen verwijderen
        }
    }
}

Een alternatief en meer aanbevolen aanpak in moderne Java-ontwikkelingen is het gebruik van ArrayDeque als stack, omdat het betere prestaties biedt.

// Voorbeeld van gebruik van ArrayDeque als stack
import java.util.ArrayDeque;
import java.util.Deque;

public class ArrayDequeStackExample {

    public static void main(String[] args) {
        Deque<String> stack = new ArrayDeque<>(); // Gebruik Deque als stack

        stack.push("Eerste"); // Elementen toevoegen
        stack.push("Tweede");
        stack.push("Derde");

        System.out.println("Top van de stack: " + stack.peek()); // Bekijk het bovenste element

        while (!stack.isEmpty()) { // Zolang de stack niet leeg is
            System.out.println("Verwijderen: " + stack.pop()); // Elementen verwijderen
        }
    }
}

Toepassingen van stacks:

  • Berekening van aritmetische uitdrukkingen (bijvoorbeeld in omgekeerde Pool Notatie).
  • Ongedaan maken/herhalen van operaties in tekstverwerkers (Ctrl+Z/Ctrl+Y).
  • Beheer van functie-aanroepen in het besturingssysteem.
  • Recursieve algoritmen.
  • Doorlopen van grafen en bomen (diepte-eerst zoeken).