Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _STACK_H
- #define STACK_MAX_SIZE 100
- #include <stdlib.h>
- // Переименовка типа чар в стек тайп, для большей абстрактности
- typedef int Stack_type;
- // Реализация стека
- typedef struct Stack_tag {
- // Создание массива
- Stack_type data[STACK_MAX_SIZE];
- // Переменная целого типа для размерности массива
- size_t size;
- } Stack_Symbols; // Имя структуры
- // Коды возвращаемых ошибок
- #define STACK_OVERFLOW -100
- #define STACK_UNDERFLOW -101
- // Положить сверху элемент
- void push(Stack_Symbols *stack, const Stack_type value) {
- // Проверка не выйдет ли массив за пределы
- if (stack->size >= STACK_MAX_SIZE) {
- exit(STACK_OVERFLOW);
- }
- // Кладем значение и увеличиваем размер
- stack->data[stack->size] = value;
- stack->size++;
- }
- // Получаем последний элемент
- Stack_type pop(Stack_Symbols *stack) {
- if (stack->size == 0) {
- exit(STACK_UNDERFLOW);
- }
- stack->size--;
- return stack->data[stack->size];
- }
- Stack_type peek(const Stack_Symbols *stack) {
- if (stack->size <= 0) {
- exit(STACK_UNDERFLOW);
- }
- return stack->data[stack->size - 1];
- }
- void printStackValue(const Stack_type value) {
- printf("%d", value);
- }
- void printStack(const Stack_Symbols *stack, void (*printStackValue)(const Stack_type)) {
- int i;
- int len = stack->size - 1;
- printf("stack %d > ", stack->size);
- for (i = 0; i < len; i++) {
- printStackValue(stack->data[i]);
- printf(" | ");
- }
- if (stack->size != 0) {
- printStackValue(stack->data[i]);
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement