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).
- Управление на извикванията на функции в операционната система.
- Рекурсивни алгоритми.
- Обход на графи и дървета (търсене в дълбочина).