Skip to content

Latest commit

 

History

History
21 lines (16 loc) · 4.11 KB

stack.md

File metadata and controls

21 lines (16 loc) · 4.11 KB

Структура данных стек

Структура данных - способ хранения данных, определяющий правила добавления, поиска, изменения и удаления этих данных. Структуры в основном различают по эффективности использования памяти и алгоритмической сложности операций с данными. Простейшим примером структуры данных является массив. Существует набор структур данных, получивший распространение в компьютерных и информационных технологиях, одним из них является стек.

Стек - структура данных, основанная принципе LIFO. Расшифровка акронима LIFO (Last In First Out) относится к единице данных - последний добавленный (last in) элемент будет первым на выдачу (first out). При последовательном добавлении нескольких элементов данных в LIFO извлекаться они будут в порядке, обратном порядку добавления. Основанный на принципе LIFO стек определяет всего две операции для изменения своего содержимого - это добавить элемент (традиционно операция называется push) и извлечь элемент (pop). Никаких операций для поиска и изменения данных в "чистом" стеке не предусматривается. Рисунок ниже иллюстрирует последовательное добавление в стек и извлечение из него 5 элементов.

image

Обычно дополнительно вводят понятие верхушки стека. Верхушкой стека называют последний добавленный элемент стека, указатель на него или любой другой его идентификатор. Обычно именно верхушка стека является операндом push и pop, отвечающим за идентификацию самого стека. При этом в случае первой операции (добавление элемента, push) верхушка стека автоматически изменяется так, чтобы указывать на добавленный элемент, а после исполнения второй операции (извлечение, pop) верхушка стека должна указывать на предпоследний элемент.

В подавляющем большинстве процессоров эта структура данных представлена на уровне ISA : есть команды push, pop и регистр верхушки стека (stack pointer, %sp) и их аналоги. Дело в том, что почти в каждом языке программирования есть функции, подпрограммы и т.д., цепочки вызовов которых очень удачно представляются в виде стека (callstack). В стек я́дра операционных систем могут складывать прерывания, ядро и обычные программы - локальные переменные.