Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions src/hw5_stack/stack.c
Original file line number Diff line number Diff line change
@@ -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 - стек не пуст
}
}
23 changes: 23 additions & 0 deletions src/hw5_stack/stack.h
Original file line number Diff line number Diff line change
@@ -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);