Структура данных и алгоритмы - стек
Стек - это абстрактный тип данных (ADT), обычно используемый в большинстве языков программирования. Он называется стеком, так как ведет себя как реальный стек, например, колода карт или куча тарелок и т. Д.

Реальный стек позволяет выполнять операции только с одного конца. Например, мы можем поместить или удалить карту или пластину только из верхней части стопки. Аналогично, Stack ADT разрешает все операции с данными только на одном конце. В любой момент времени мы можем получить доступ только к верхнему элементу стека.
Эта особенность делает его структурой данных LIFO. LIFO означает «Последний пришел первым». Здесь элемент, который помещен (вставлен или добавлен) последним, доступен первым. В терминологии стека операция вставки называется операцией PUSH, а операция удаления - операцией POP .
Представление стека
Следующая диаграмма изображает стек и его операции -

Стек может быть реализован с помощью Array, Structure, Pointer и Linked List. Стек может иметь фиксированный размер или иметь динамическое изменение размера. Здесь мы собираемся реализовать стек с использованием массивов, что делает его реализацией стека фиксированного размера.
Основные операции
Операции со стеком могут включать инициализацию стека, его использование и последующую деинициализацию. Помимо этих основных вещей, стек используется для следующих двух основных операций:
push () - Push ( сохранение) элемента в стеке.
pop () - Удаление (доступ) элемента из стека.
Когда данные помещаются в стек.
Для эффективного использования стека нам также необходимо проверить состояние стека. Для этой же цели в стеки добавлена следующая функциональность:
peek () - получить верхний элемент данных стека, не удаляя его.
isFull () - проверить, заполнен ли стек.
isEmpty () - проверить, пуст ли стек.
Мы всегда поддерживаем указатель на последние данные PUSHed в стеке. Поскольку этот указатель всегда представляет вершину стека, отсюда и название top . Верхний указатель предоставляет верхнее значение стека, фактически не удаляя его.
Сначала мы должны узнать о процедурах для поддержки функций стека -
PEEK ()
Алгоритм функции peek () -
begin procedure peek return stack[top] end procedure
Реализация функции peek () на языке программирования C -
пример
int peek() { return stack[top]; }
полон()
Алгоритм функции isfull () -
begin procedure isfull if top equals to MAXSIZE return true else return false endif end procedure
Реализация функции isfull () на языке программирования C -
пример
bool isfull() { if(top == MAXSIZE) return true; else return false; }
пустой()
Алгоритм функции isempty () -
begin procedure isempty if top less than 1 return true else return false endif end procedure
Реализация функции isempty () в языке программирования C немного отличается. Мы инициализируем вершину в -1, так как индекс в массиве начинается с 0. Поэтому мы проверяем, находится ли вершина ниже нуля или -1, чтобы определить, является ли стек пустым. Вот код -
пример
bool isempty() { if(top == -1) return true; else return false; }
Push Operation
Процесс помещения нового элемента данных в стек известен как операция Push. Push-операция включает в себя ряд шагов -
Шаг 1 - Проверяет, заполнен ли стек.
Шаг 2 - Если стек заполнен, выдает ошибку и завершается.
Шаг 3 - Если стек не заполнен, увеличивается сверху вниз, чтобы указать следующий пустой пробел.
Шаг 4 - Добавляет элемент данных в расположение стека, куда указывает верх.
Шаг 5 - Возвращает успех.

Если связанный список используется для реализации стека, то на шаге 3 нам нужно динамически распределять пространство.
Алгоритм работы PUSH
Простой алгоритм операции Push может быть получен следующим образом:
begin procedure push: stack, data if stack is full return null endif top ← top + 1 stack[top] ← data end procedure
Реализация этого алгоритма на C очень проста. Смотрите следующий код -
пример
void push(int data) { if(!isFull()) { top = top + 1; stack[top] = data; } else { printf("Could not insert data, Stack is full.\n"); } }
Поп Операция
Доступ к контенту при удалении его из стека известен как операция Pop. В реализации массива операции pop () элемент данных фактически не удаляется, вместо этого top уменьшается до нижней позиции в стеке, чтобы указывать на следующее значение. Но в реализации связного списка pop () фактически удаляет элемент данных и освобождает пространство памяти.
Операция Pop может включать следующие шаги:
Шаг 1 - Проверяет, пуст ли стек.
Шаг 2 - если стек пуст, выдает ошибку и завершается.
Шаг 3 - Если стек не пуст, обращается к элементу данных, на который указывает вершина .
Шаг 4 - Уменьшает значение вершины на 1.
Шаг 5 - Возвращает успех.

Алгоритм для поп-операции
Простой алгоритм операции Pop может быть получен следующим образом:
begin procedure pop: stack if stack is empty return null endif data ← stack[top] top ← top - 1 return data end procedure
Реализация этого алгоритма в C, заключается в следующем -
пример
int pop(int data) { if(!isempty()) { data = stack[top]; top = top - 1; return data; } else { printf("Could not retrieve data, Stack is empty.\n"); } }
Для полной программы стека на языке программирования C, пожалуйста, нажмите здесь .