Sobes.tech
Intern

Τι είναι οι στοίβες;

sobes.tech AI

Απάντηση από AI

Η στοίβα είναι μια δομή δεδομένων που λειτουργεί σύμφωνα με την αρχή LIFO (Last-In, First-Out). Τα στοιχεία προστίθενται και αφαιρούνται μόνο από ένα άκρο, που ονομάζεται κορυφή της στοίβας.

Βασικές λειτουργίες:

  • push: προσθέτει ένα στοιχείο στην κορυφή της στοίβας.
  • pop: αφαιρεί ένα στοιχείο από την κορυφή της στοίβας και το επιστρέφει.
  • peek: λαμβάνει την τιμή του στοιχείου στην κορυφή της στοίβας χωρίς να το αφαιρεί.
  • isEmpty: ελέγχει αν η στοίβα είναι άδεια.

Στη Java, η στοίβα αντιπροσωπεύεται από την κλάση Stack, η οποία είναι υποκλάση της Vector.

// Παράδειγμα χρήσης της Stack
import java.util.Stack;

public class StackExample {

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

        stack.push("Πρώτο"); // Προσθήκη στοιχείων
        stack.push("Δεύτερο");
        stack.push("Τρίτο");

        System.out.println("Κορυφή της στοίβας: " + stack.peek()); // Προβολή του ανώτερου στοιχείου

        while (!stack.empty()) { // Όσο η στοίβα δεν είναι άδεια
            System.out.println("Αφαίρεση: " + stack.pop()); // Αφαίρεση στοιχείων
        }
    }
}

Μια εναλλακτική και πιο συστηνόμενη προσέγγιση στη σύγχρονη ανάπτυξη Java είναι η χρήση του ArrayDeque ως στοίβα, καθώς προσφέρει καλύτερη απόδοση.

// Παράδειγμα χρήσης του ArrayDeque ως στοίβα
import java.util.ArrayDeque;
import java.util.Deque;

public class ArrayDequeStackExample {

    public static void main(String[] args) {
        Deque<String> stack = new ArrayDeque<>(); // Χρήση του Deque ως στοίβα

        stack.push("Πρώτο"); // Προσθήκη στοιχείων
        stack.push("Δεύτερο");
        stack.push("Τρίτο");

        System.out.println("Κορυφή της στοίβας: " + stack.peek()); // Προβολή του ανώτερου στοιχείου

        while (!stack.isEmpty()) { // Όσο η στοίβα δεν είναι άδεια
            System.out.println("Αφαίρεση: " + stack.pop()); // Αφαίρεση στοιχείων
        }
    }
}

Εφαρμογές των στοίβων:

  • Υπολογισμός αριθμητικών εκφράσεων (π.χ., σε αντίστροφη πολωνική σημειογραφία).
  • Αναίρεση/επανάληψη λειτουργιών σε επεξεργαστές κειμένου (Ctrl+Z/Ctrl+Y).
  • Διαχείριση κλήσεων συναρτήσεων στο λειτουργικό σύστημα.
  • Αναδρομικοί αλγόριθμοι.
  • Διάσχιση γραφημάτων και δέντρων (αναζήτηση βάθους).