diff --git a/src/hw5_stack/stack.c b/src/hw5_stack/stack.c new file mode 100644 index 0000000..6f15f12 --- /dev/null +++ b/src/hw5_stack/stack.c @@ -0,0 +1,31 @@ +#include "stack.h" + +// Создаем стек, делая значение top равным -1 ("нет элементов") +void init_stack(Stack *stack) { + stack->topIndex = -1; +} + +// Добавляем элемент +void push(Stack *stack, char value) { + stack->topIndex++; // Увеличиваем индекс на 1 + stack->elements[stack->topIndex] = value; // Добавляем сам элемент в массив +} + +// Берем верхний элемент и удаляем его +char pop(Stack *stack) { + if (stackEmptiness(stack)) { // Проверяем не пуст ли стек + return '\0'; // Возвращаем '\0' если пуст (в таком виде, потому что нужно вернуть char) + } + char value = stack->elements[stack->topIndex]; // Сохраняем верхний элемент + stack->topIndex--; // Уменьшаем индекс + return value; // Возвращаем сохраненный элемент +} + +// Проверяем пуст ли стек (Чтоб не убрать "пустоту") +int stackEmptiness(Stack *stack) { + if (stack->topIndex == -1) { + return 1; // 1 - стек пуст + } else { + return 0; // 0 - стек не пуст + } +} diff --git a/src/hw5_stack/stack.h b/src/hw5_stack/stack.h new file mode 100644 index 0000000..517dd1b --- /dev/null +++ b/src/hw5_stack/stack.h @@ -0,0 +1,23 @@ +// Этот модуль предоставляет функции для работы со стеком для Продвинутый баланс скобок и Сортировочная станция: +#pragma once +#define STACK_SIZE 512 + +// Структура для стека +typedef struct { + char elements[STACK_SIZE]; // массив для хранения + int topIndex; // индекс верхнего элемента +} Stack; + +// Создание стека +void init_stack(Stack *stack); + +// Добавление элемента в стек +void push(Stack *stack, char value); + +// Удаление элемента из стека с проверкой на пустоту +// Вернет значение элемента, если есть что удалять, и 0 если нет +char pop(Stack *stack); + +// Проверка стэка на пустоту +// Вернет 1 если стек пуст, 0 если нет +int stackEmptiness(Stack *stack);