Sobes.tech
Intern

Mi az a verem?

sobes.tech MI

Válasz az MI-től

A verem egy olyan adatszerkezet, amely a LIFO (Last-In, First-Out) elv szerint működik. Az elemek csak egy végén, a verem csúcsánál adhatók hozzá vagy vehetők ki.

Fő műveletek:

  • push: egy elem hozzáadása a verem tetejére.
  • pop: egy elem eltávolítása a verem tetejéről és visszaadása.
  • peek: az elem értékének lekérdezése a verem tetején anélkül, hogy eltávolítanánk.
  • isEmpty: ellenőrzi, hogy a verem üres-e.

Java-ban a verem a Stack osztállyal van reprezentálva, amely a Vector alosztálya.

// Stack használatának példája
import java.util.Stack;

public class StackExample {

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

        stack.push("Első"); // Elemszám hozzáadása
        stack.push("Második");
        stack.push("Harmadik");

        System.out.println("Verem teteje: " + stack.peek()); // A felső elem megtekintése

        while (!stack.empty()) { // Amíg a verem nem üres
            System.out.println("Eltávolítjuk: " + stack.pop()); // Elemszám eltávolítása
        }
    }
}

A modern Java fejlesztésekben ajánlott és jobb teljesítményt nyújtó alternatíva a ArrayDeque használata veremként, mivel ez hatékonyabb.

// ArrayDeque veremként való használatának példája
import java.util.ArrayDeque;
import java.util.Deque;

public class ArrayDequeStackExample {

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

        stack.push("Első"); // Elemszám hozzáadása
        stack.push("Második");
        stack.push("Harmadik");

        System.out.println("Verem teteje: " + stack.peek()); // A felső elem megtekintése

        while (!stack.isEmpty()) { // Amíg a verem nem üres
            System.out.println("Eltávolítjuk: " + stack.pop()); // Elemszám eltávolítása
        }
    }
}

A verem alkalmazásai:

  • Matematikai kifejezések számítása (pl. fordított lengyel notációban).
  • Műveletek visszavonása/ismétlése szövegszerkesztőkben (Ctrl+Z/Ctrl+Y).
  • Függvényhívások kezelése az operációs rendszerben.
  • Rekurzív algoritmusok.
  • gráfok és fák bejárása (mélységi keresés).