Advertisement
Guest User

vida ruim

a guest
Nov 21st, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.42 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct pilha Pilha;
  6.  
  7. Pilha * pilha_cria (int maxTamanho);
  8. Pilha * pilha_copia (Pilha * p);
  9. void pilha_libera (Pilha * p);
  10. int pilha_insere (Pilha * p, char * elemento); // push
  11. char * pilha_remove (Pilha * p); // pop
  12. char * pilha_obtem_topo  (Pilha * p); // top
  13. int pilha_obtem_tamanho  (Pilha * p);
  14. int pilha_se_vazia (Pilha * p);
  15. int pilha_se_cheia (Pilha * p);
  16. char * pilha_imprime  (Pilha * p);
  17.  
  18. struct pilha {
  19.     int tamanho;
  20.     int maxTamanho;
  21.     char **elementos;
  22. };
  23.  
  24. Pilha *pilha_cria(int maxTamanho) {
  25.     Pilha *q = malloc (sizeof(Pilha));
  26.    
  27.     if(q != NULL) {
  28.         q->elementos = malloc (sizeof(char *) * maxTamanho);
  29.         q->tamanho = 0;
  30.     }
  31.  
  32.     return q;
  33. }
  34.  
  35. Pilha * pilha_copia (Pilha * p) {
  36.     Pilha *q = pilha_cria(p->maxTamanho);
  37.    
  38.     int i;
  39.    
  40.     for(i = 0; i < p->tamanho; i++) {
  41.         q->elementos[i] = malloc (strlen(p->elementos[i])+1);
  42.         strcpy(q->elementos[i], p->elementos[i]);
  43.     }
  44.    
  45.     q->tamanho = p->tamanho;
  46.    
  47.     return q;
  48. }
  49.  
  50. void pilha_libera (Pilha * p) {
  51.     int i;
  52.    
  53.     for(i = 0; i < p->tamanho; i++) {
  54.         free(p->elementos[i]);
  55.     }
  56.    
  57.     free(p);
  58. }
  59.  
  60. int pilha_insere (Pilha * p, char * elemento) {
  61.     if(pilha_se_cheia(p) || p == NULL)
  62.         return 0;
  63.        
  64.     strcpy(p->elementos[p->tamanho], elemento);
  65.    
  66.     p->tamanho++;  
  67.    
  68.     return 1;
  69. }
  70.  
  71. char * pilha_remove (Pilha * p) {
  72.     char *aux = malloc (strlen(p->elementos[p->tamanho-1])+1);
  73.    
  74.     p->elementos[p->tamanho-1] = NULL;
  75.    
  76.     p->tamanho--;
  77.    
  78.     return aux;
  79. }
  80.  
  81. char * pilha_obtem_topo  (Pilha * p) {
  82.     ;
  83. }
  84. int pilha_obtem_tamanho  (Pilha * p) {
  85.     if (p == NULL) return -1;
  86.    
  87.     return p->tamanho;
  88. }
  89. int pilha_se_vazia (Pilha * p) {
  90.     if(p == NULL) return -1;
  91.    
  92.     if(p->tamanho == 0) return 1;
  93. }
  94. int pilha_se_cheia (Pilha * p) {
  95.     if(p == NULL) return -1;
  96.    
  97.     if(p->tamanho == p->maxTamanho) return 1;
  98. }
  99. char * pilha_imprime  (Pilha * p) {
  100.     ;
  101. }
  102.  
  103.  
  104. int main () {
  105.     Pilha * p = pilha_cria (100);
  106.     pilha_insere  (p, "44");
  107.     pilha_insere  (p, "bola");
  108.     pilha_insere  (p, "33");
  109.     pilha_insere  (p, "carro");
  110.     printf("[pilha original: %d] #topo# %s\n", pilha_obtem_tamanho(p), pilha_imprime(p));
  111.     Pilha * q = pilha_copia (p);
  112.     printf("[pilha copia: %d   ] #topo# %s\n", pilha_obtem_tamanho(q), pilha_imprime(q));
  113.     pilha_insere  (q, "mostarda");
  114.     printf("[pilha copia: %d   ] #topo# %s\n", pilha_obtem_tamanho(q), pilha_imprime(q));
  115.     pilha_libera(q);
  116.     pilha_libera(p);
  117.     return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement