Advertisement
Guest User

Стек и скобочные последовательности через стек

a guest
Dec 17th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. typedef int datatype;
  6.  
  7. typedef struct
  8. {
  9.     datatype *item;
  10.     int size;
  11.     int sp;
  12. } stack;
  13.  
  14. void init_stack(stack *st)
  15. {
  16.     st -> size =16;
  17.     st -> sp = 0;
  18.     st -> item = malloc(16 * sizeof(datatype));
  19. }
  20.  
  21. void delete_stack(stack *st)
  22. {
  23.     free(st -> item);
  24. }
  25.  
  26. void push(stack *st, datatype value)
  27. {
  28.     if (st -> sp == st -> size - 1)
  29.     {
  30.         st -> size = st -> size * 2;
  31.         st -> item = realloc(st -> item, st -> size * sizeof(datatype));
  32.     }
  33.     st -> item[st -> sp++]=value;
  34. }
  35.  
  36. datatype pop(stack *st)
  37. {
  38.     if(st -> sp < 1)
  39.     {
  40.         printf("not Ok");
  41.         exit(1);
  42.     }
  43.     --(st -> sp);
  44.     return st -> item[st -> sp];
  45. }
  46.  
  47. int empty_stack(stack *st)
  48. {
  49.     return (st -> sp == 0);
  50. }
  51.  
  52. int check_round_bracket()
  53. {
  54.     stack st; // для круглых скобок
  55.     stack stk; // для квадратных скобок
  56.     stack stf; // для фигурных скобок
  57.     char c;
  58.     init_stack(&st);
  59.     init_stack(&stk);
  60.     init_stack(&stf);
  61.     while((c = getchar()) != '.')
  62.     {
  63.         if(c == '(')
  64.             push(&st,1);
  65.         else if(c == ')')
  66.             pop(&st);
  67.     }
  68.     if(empty_stack(&st))
  69.         printf("Ok");
  70.     else
  71.         printf("not Ok");
  72.     delete_stack(&st);
  73. }
  74.  
  75. int main(void)
  76. {
  77.     stack st;
  78.     init_stack(&st);
  79.     push(&st,1);
  80.     push(&st,2);
  81.     push(&st,3);
  82.     push(&st,4);
  83.     printf("%d",pop(&st));
  84.     printf("%d",pop(&st));
  85.     printf("%d",pop(&st));
  86.     printf("%d",pop(&st));
  87.  
  88.     check_round_bracket();
  89.  
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement