Advertisement
Eduardo_Pires

Pilha estática

Aug 28th, 2022
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.30 KB | Software | 0 0
  1. #include<stdlib.h> // malloc, free, exit
  2. #include<stdio.h>  // printf, scanf
  3.  
  4. #define  MAX  10
  5.  
  6. // pilha estatica e sequencial
  7. struct pilha {
  8.     int topo;
  9.     char elementos[MAX];
  10. };
  11.  
  12. typedef struct pilha Pilha; // tipo Pilha
  13.  
  14. Pilha* criar(int *DeuCerto)
  15. {
  16.     Pilha* p;
  17.  
  18.     p = (Pilha*) malloc(sizeof(Pilha));
  19.     if (p == NULL) *DeuCerto = 0; // 0 == false
  20.     else {
  21.         p->topo = -1;
  22.         *DeuCerto = 1;
  23.     }
  24.  
  25.     return p;
  26. }
  27.  
  28. void destruir(Pilha *p)
  29. {
  30.     /*if (p == NULL) // pilha nao existe
  31.         *DeuCerto = 0;
  32.     else {
  33.         *DeuCerto = 1;
  34.         free(p);
  35.     }
  36.     */
  37.     //OU
  38.  
  39.     if (p != NULL) free(p);
  40.  
  41. }
  42.  
  43. int vazia(Pilha *p)
  44. {
  45.     if (p->topo == -1) // a pilha esta vazia
  46.         return 1;   // 1 == true
  47.     else return 0;  // 0 == false
  48. }
  49.  
  50. int cheia(Pilha *p)
  51. {
  52.     if (p->topo == MAX-1) // a pilha esta cheia
  53.         return 1;   // 1 == true
  54.     else return 0;  // 0 == false
  55. }
  56.  
  57. void empilhar(Pilha *p, char x, int *DeuCerto)
  58. {
  59.     if (cheia(p) == 1) // pilha cheia
  60.         *DeuCerto = 0;
  61.     else {  // pilha nao tah cheia
  62.         p->topo = p->topo + 1;
  63.         // int t = p->topo;
  64.         // p->elementos[t] = x;
  65.         p->elementos[p->topo] = x;
  66.         *DeuCerto = 1;
  67.     }
  68. }
  69.  
  70. void desempilhar(Pilha *p, char *x, int *DeuCerto)
  71. {
  72.     if (vazia(p) == 1) // pilha vazia
  73.         *DeuCerto = 0;
  74.     else {  // pilha nao tah cheia
  75.         *x = p->elementos[p->topo];
  76.         p->topo = p->topo - 1;
  77.         *DeuCerto = 1;
  78.     }
  79. }
  80.  
  81.  
  82. int main()
  83. {
  84.     Pilha *p;
  85.     int DeuCerto;
  86.     char c;
  87.  
  88.     p = criar(&DeuCerto);
  89.     if (DeuCerto == 0) { // tratar o erro aqui...
  90.         printf("Nao foi possivel criar a pilha");
  91.         exit(1);
  92.     }
  93.  
  94.     empilhar(p, 'a', &DeuCerto);
  95.     empilhar(p, 'b', &DeuCerto);
  96.     empilhar(p, 'c', &DeuCerto);
  97.     empilhar(p, 'd', &DeuCerto);
  98.     empilhar(p, 'e', &DeuCerto);
  99.     empilhar(p, 'f', &DeuCerto);
  100.     empilhar(p, 'g', &DeuCerto);
  101.     empilhar(p, 'h', &DeuCerto);
  102.     empilhar(p, 'i', &DeuCerto);
  103.     empilhar(p, 'j', &DeuCerto);
  104.     desempilhar(p, &c, &DeuCerto);
  105.     empilhar(p, 'k', &DeuCerto);
  106.  
  107.  
  108.     if (cheia(p) == 1) printf("pilha cheia\n");
  109.  
  110.     desempilhar(p, &c, &DeuCerto);
  111.     printf("   %c\n", c);
  112.  
  113.     destruir(p);
  114.  
  115.     return 0;
  116. }
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement