Ответ
Стек — это абстрактный тип данных, работающий по принципу LIFO (Last In, First Out) — последний пришел, первый ушел.
Базовые операции:
- Push (добавить): Помещает элемент на вершину стека.
- Pop (удалить): Удаляет и возвращает элемент с вершины.
- Peek/Top (просмотреть): Возвращает элемент с вершины без удаления.
- isEmpty (проверить на пустоту).
Реализация на Swift (используя массив):
struct Stack<Element> {
private var elements = [Element]()
mutating func push(_ element: Element) {
elements.append(element)
}
mutating func pop() -> Element? {
return elements.popLast()
}
func peek() -> Element? {
return elements.last
}
var isEmpty: Bool { elements.isEmpty }
}
// Использование
var stack = Stack<Int>()
stack.push(1)
stack.push(2)
print(stack.peek()) // Optional(2)
print(stack.pop()) // Optional(2)
Типичные применения:
- Навигация:
UINavigationControllerхранит контроллеры в стеке. - Отмена действий (Undo/Redo).
- Алгоритмы: обход деревьев (DFS), проверка сбалансированности скобок, вычисление выражений (польская запись).
- Управление вызовами: стек вызовов (call stack) в runtime программы.