Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.85 KB | None | 0 0
  1. #define _STACK_H
  2.  
  3. #define STACK_MAX_SIZE 100
  4.  
  5. #include <stdlib.h>
  6.  
  7. // Переименовка типа чар в стек тайп, для большей абстрактности
  8. typedef int Stack_type;
  9.  
  10. // Реализация стека
  11. typedef struct Stack_tag {
  12.     // Создание массива
  13.     Stack_type data[STACK_MAX_SIZE];
  14.     // Переменная целого типа для размерности массива
  15.     size_t size;
  16. } Stack_Symbols; // Имя структуры
  17.  
  18. // Коды возвращаемых ошибок
  19. #define STACK_OVERFLOW  -100
  20. #define STACK_UNDERFLOW -101
  21.  
  22. // Положить сверху элемент
  23. void push(Stack_Symbols *stack, const Stack_type value) {
  24.     // Проверка не выйдет ли массив за пределы
  25.     if (stack->size >= STACK_MAX_SIZE) {
  26.         exit(STACK_OVERFLOW);
  27.     }
  28.     // Кладем значение и увеличиваем размер
  29.     stack->data[stack->size] = value;
  30.     stack->size++;
  31. }
  32.  
  33. // Получаем последний элемент
  34. Stack_type pop(Stack_Symbols *stack) {
  35.     if (stack->size == 0) {
  36.         exit(STACK_UNDERFLOW);
  37.     }
  38.     stack->size--;
  39.     return stack->data[stack->size];
  40. }
  41.  
  42.  
  43. Stack_type peek(const Stack_Symbols *stack) {
  44.     if (stack->size <= 0) {
  45.         exit(STACK_UNDERFLOW);
  46.     }
  47.     return stack->data[stack->size - 1];
  48. }
  49.  
  50. void printStackValue(const Stack_type value) {
  51.     printf("%d", value);
  52. }
  53.  
  54. void printStack(const Stack_Symbols *stack, void (*printStackValue)(const Stack_type)) {
  55.     int i;
  56.     int len = stack->size - 1;
  57.     printf("stack %d > ", stack->size);
  58.     for (i = 0; i < len; i++) {
  59.         printStackValue(stack->data[i]);
  60.         printf(" | ");
  61.     }
  62.     if (stack->size != 0) {
  63.         printStackValue(stack->data[i]);
  64.     }
  65.     printf("\n");
  66.  
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement