Advertisement
Ricarte

TAD Pilha

Oct 24th, 2022 (edited)
748
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.38 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdbool.h>
  3. #define MAX  5
  4.  
  5. /*Tipo de dado Pilha que possui um vetor de char e um inteiro que define a posição do topo da pilha*/
  6. typedef struct pilha
  7. {
  8.      char elementos[MAX];
  9.      int topo; // posição do topo da pilha
  10.  
  11. }Pilha;
  12.  
  13. // define o topo da pilha como -1
  14. void criarP(Pilha *p)
  15. {
  16.     p->topo = -1;
  17. }
  18. // define o topo da pilha como -1 destuindo as antigas posições do topo
  19. void destuirP(Pilha *p)
  20. {
  21.     p->topo = -1;
  22. }
  23. // verifica se uma determinada pilha está cheia comparando a posição do topo com a constante MAX
  24. bool cheia (Pilha p)
  25. {
  26.     bool deuCerto;
  27.     if (p.topo == MAX)
  28.     {
  29.         deuCerto = true;
  30.         return deuCerto;
  31.     }  
  32.     else
  33.     {
  34.         deuCerto = false;
  35.         return deuCerto;
  36.     }
  37. }
  38. // verifica se uma determinada pilha esta vazia comparando a posição do topo com -1
  39. bool vazia(Pilha p)
  40. {
  41.     bool deuCerto;
  42.     if(p.topo == -1)
  43.     {
  44.         deuCerto = true;
  45.         return deuCerto;
  46.     }
  47.     else
  48.     {
  49.         deuCerto = false;
  50.         return deuCerto;
  51.     }
  52. }
  53. /* recebe um ponteiro para pilha e um char, verifica se a pilha esta cheia, caso sim retorna false
  54. caso contrario incrementa o topo da pilha, e insere x na posição topo do vetor elementos e retorna true
  55. */
  56. bool empilhar(Pilha *p, char x)
  57. {
  58.     bool deuCerto;
  59.     if(cheia(*p) == true)
  60.     {
  61.         deuCerto = false;
  62.         return deuCerto;
  63.     }
  64.     else
  65.     {
  66.         p->topo = p->topo + 1;
  67.         p->elementos[p->topo] = x;
  68.         deuCerto = true;
  69.         return deuCerto;
  70.     }
  71. }
  72. /* recebe um ponteiro para pilha e um ponteiro para char, verifica se a pilha está vazia,
  73. caso sim retorna false, caso contrario a funçao decrementa o topo da pilha e atribui a *X o valor da posicao
  74. topo do vetor elementos e retorna true*/
  75. bool desempilhar(Pilha *p, char *x)
  76. {
  77.     bool deuCerto;
  78.     if(vazia(*p) == true)
  79.     {
  80.         deuCerto = false;
  81.         return deuCerto;
  82.     }
  83.     else
  84.     {
  85.         *x = p->elementos[p->topo];
  86.         p ->topo = p ->topo - 1;
  87.         deuCerto = true;
  88.         return deuCerto;
  89.     }
  90. }
  91.  
  92. int main ()
  93. {
  94.     Pilha stack;
  95.     char c;
  96.     criarP(&stack);
  97.     for(int i = 0;i < MAX;i++)
  98.     {
  99.         scanf("%c", &c);
  100.         empilhar(&stack, c);
  101.     }
  102.     while (desempilhar(&stack, &c) == true)
  103.     {
  104.         printf("%c ", c);
  105.     }
  106.     return 0;
  107. }
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement