Sobes.tech
Intern

რა არის სტეკები?

sobes.tech AI

პასუხი AI-სგან

სტეკი — ეს მონაცემთა სტრუქტურაა, რომელიც მუშაობს LIFO (ბოლოს შევიდა — პირველმა გამოვიდა) პრინციპით. ელემენტები ემატება და ამოიღება მხოლოდ ერთ ბოლოში, რომელსაც სტეკის მწვერვალი ეწოდება.

ძირითადი ოპერაციები:

  • 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).
  • ფუნქციების გამოძახების მართვა ოპერაციული სისტემაში.
  • რეკურსიული ალგორითმები.
  • გრაფებისა და ხეების გადალახვა (გაფართოება ძიება).