Что такое стек (Stack) как структура данных?

«Что такое стек (Stack) как структура данных?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стек — это абстрактный тип данных, работающий по принципу 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)

Типичные применения:

  1. Навигация: UINavigationController хранит контроллеры в стеке.
  2. Отмена действий (Undo/Redo).
  3. Алгоритмы: обход деревьев (DFS), проверка сбалансированности скобок, вычисление выражений (польская запись).
  4. Управление вызовами: стек вызовов (call stack) в runtime программы.