46 lines
1.3 KiB
C
46 lines
1.3 KiB
C
#ifndef STACK_H
|
||
#define STACK_H
|
||
|
||
#include <stdbool.h>
|
||
#include <stddef.h>
|
||
|
||
#define MAX_STACK_SIZE 100
|
||
|
||
// Структура элемента стека
|
||
typedef struct {
|
||
char *str_ptr; // Указатель на строку
|
||
char type; // Тип операнда
|
||
} Element;
|
||
|
||
// Структура стека
|
||
typedef struct {
|
||
Element data[MAX_STACK_SIZE]; // Массив элементов
|
||
int top;
|
||
} Stack;
|
||
|
||
// Инициализация стека
|
||
void initStack(Stack *s);
|
||
|
||
// Проверка на пустоту
|
||
bool isEmpty(Stack *s);
|
||
|
||
// Проверка на переполнение
|
||
bool isFull(Stack *s);
|
||
|
||
// Добавление опаранда в стек (push),
|
||
// операндом может быть число или выражение с переменной
|
||
bool push(Stack *s, const char *value, char type);
|
||
|
||
// Извлечение элемента из стека (pop)
|
||
bool pop(Stack *s, Element *out);
|
||
|
||
// Просмотр верхнего элемента без извлечения (peek)
|
||
bool peek(Stack *s, Element *out);
|
||
|
||
// Очистка стека (освобождение памяти)
|
||
void clearStack(Stack *s);
|
||
|
||
// Вычисление выражения
|
||
char* calulate(Element* tokens, int tokens_count);
|
||
|
||
#endif // STACK_H
|