Стек (структура от данни) — как работи, принцип LIFO и основни операции
Научете как работи стекът (LIFO): основни операции push/pop, peek, приложения и примери. Ясни обяснения и практичен код за бързо усвояване.
Стекът е една от най-важните структури от данни в информатиката. За да разберете как работи стекът, представете си тесте карти за игра, което е обърнато с лицето надолу. Можем лесно да получим достъп само до картата, която е отгоре. Когато искаме да разгледаме горната карта, можем да направим две неща: можем да надникнем в нея, но да я оставим на купчината, или можем да я откъснем. Когато отскачаме от най-горния обект, ние го сваляме от купчината. Ако искаме да добавим още една карта към върха на купчината, избутваме я.
Стекът се нарича колекция от типа "последен влязъл - първи излязъл" (LIFO). Това означава, че последното нещо, което сме добавили (избутали), е първото, което се изважда (изскача). Ако последната карта, която сме сложили в купчината карти, е асо, то първата карта, която сме извадили отгоре, е същото асо.
Основни операции
- push(x) — добавя елемент x на върха на стека.
- pop() — премахва и връща елемента от върха. Ако стекът е празен — възниква подстек (underflow) или се връща специална стойност/изключение.
- peek() или top() — връща елемента на върха без да го премахва.
- isEmpty() — проверява дали стекът е празен.
- size() — връща броя на елементите в стека.
Примерна имплементация (псевдокод)
Много имплементации са прости и интуитивни. Ето два основни подхода:
- Масивно-базиран стек
Използва масив и индекс top.
push(x): if top == capacity-1 then resize() else top++; array[top]=x
pop(): if top == -1 then error else x=array[top]; top--; return x
peek(): if top == -1 then error else return array[top] - Свързан стек (с единично свързан списък)
Използва връх (head). Всеки нов елемент става новият head.
push(x): node.next = head; head = node
pop(): if head == null then error else x = head.value; head = head.next; return x
Времева и пространствена сложност
- Операции push, pop и peek обикновено са O(1) — изпълняват се константно време.
- Пространството е O(n), където n е броят съхранявани елементи. При масивната имплементация може да има периодично пренасочване при resize (амортизирана O(1) за push).
Типични приложения и случаи на използване
- Системен стек за повиквания на функции (call stack) — съхранява локални променливи и адреси за връщане.
- Отмяна/възстановяване (undo/redo) в редактори.
- Парсинг и проверка на правилно вложени скоби и изрази.
- Изчисляване на изрази (инфикс → постфикс) и оценяване на постфиксни изрази.
- Алгоритми за обхождане като DFS (depth-first search).
- Решаване на проблеми с backtracking (напр. лабиринти, комбинаторни задачи).
Чести проблеми и предпазни мерки
- Underflow (изваждане от празен стек) — винаги проверявайте isEmpty() преди pop().
- Overflow (пълен стек при фиксирана масивна имплементация) — предвидете динамично разширяване или проверка за капацитет.
- Синхронизация в мултнишови среди — ако множество нишки достъпват един и същи стек, е нужна синхронизация или използване на lock-free/конкурентни структури.
Съвети за практическо използване
- За лесно дебъгване визуализирайте съдържанието на стека от дъното към върха.
- Избирайте имплементация според изискванията: масив е по-бърз и ефективен по памет при предвидим капацитет; свързан списък е гъвкав при чести добавяния и премахвания с неизвестен горен брой елементи.

Две действия върху стека: push и pop.
История
Коминът е предложен за първи път през 1955 г., а след това патентован през 1957 г. от германеца Фридрих Л. Бауер. По същото време същата концепция е разработена независимо от австралиеца Чарлз Леонард Хамблин.
Други операции
В съвременните компютърни езици стекът обикновено се реализира с повече операции от "push" и "pop". Някои реализации имат функция, която връща текущата дължина на стека. Друга типична помощна операция е "top" (известна също като "peek"), която може да върне текущия горен елемент на стека, без да го премахва. Друга често срещана операция е "dup", която прави копие на елемента в горната част на стека.
Свързани страници
- Машина за подреждане
обискирам