fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct item_p
  5. {
  6. int elemento;
  7. struct item_p *proximo;
  8. } pilhaItem;
  9.  
  10. typedef struct
  11. {
  12. pilhaItem *raiz;
  13. int tamanho;
  14. } pilha;
  15.  
  16.  
  17. pilha* pilha_nova()
  18. {
  19. /* cria pilha */
  20. pilha *p = (pilha*) malloc(sizeof(pilha));
  21. if(p == NULL)
  22. return NULL;
  23.  
  24. /* pilha esta' vazia */
  25. p->raiz = NULL;
  26. p->tamanho = 0;
  27.  
  28. return p;
  29. }
  30.  
  31.  
  32.  
  33. int pilha_tamanho(pilha *p)
  34. {
  35. if (p == NULL)
  36. return -1;
  37.  
  38. return p->tamanho;
  39. }
  40.  
  41.  
  42. int pilha_top(pilha *p)
  43. {
  44. pilhaItem *aux;
  45.  
  46. if (p == NULL || p->tamanho == 0)
  47. return NULL;
  48.  
  49. aux = p->raiz;
  50. return aux->elemento;
  51. }
  52.  
  53. pilhaItem* pilha_novo_elemento(int valor)
  54. {
  55. /* aloca memoria para a estrutura pilhaItem */
  56. pilhaItem *item = (pilhaItem *) malloc(sizeof(pilhaItem));
  57. if(item == NULL)
  58. return NULL;
  59.  
  60. /* cria nova string */
  61. item->elemento=valor;
  62.  
  63. /* item ainda nao tem proximo */
  64. item->proximo = NULL;
  65.  
  66. return item;
  67. }
  68.  
  69. void pilha_push(pilha *p, int valor)
  70. {
  71. pilhaItem *novo = NULL;
  72.  
  73. if (p == NULL || valor == NULL)
  74. return;
  75.  
  76. /* cria novo item */
  77. novo = pilha_novo_elemento(valor);
  78. if (novo == NULL)
  79. return;
  80.  
  81. p->tamanho++;
  82.  
  83. /* inserir no topo da pilha */
  84. /* se a pilha esta vazia */
  85. if (p->raiz == NULL)
  86. {
  87. p->raiz = novo;
  88. return;
  89. }
  90.  
  91. /* primeiro elemento */
  92. novo->proximo = p->raiz;
  93. p->raiz = novo;
  94. }
  95.  
  96. void pilha_pop(pilha *p)
  97. {
  98. pilhaItem *curr;
  99.  
  100. if (p == NULL || p->tamanho == 0)
  101. return;
  102.  
  103. curr = p->raiz;
  104. p->raiz = curr->proximo;
  105. p->tamanho--;
  106.  
  107. /* liberta memoria associada ao item removido */
  108. free(curr);
  109. }
  110.  
  111.  
  112.  
  113. main ()
  114. {
  115. int Dados, i, op;
  116. pilha *pilha=pilha_nova();
  117. pilha_push(pilha, 2);
  118. pilha_push(pilha, 4);
  119. pilha_push(pilha, 6);
  120. while(pilha_tamanho(pilha)>0)
  121. {
  122. printf("%d\n", pilha_top(pilha));
  123. pilha_pop(pilha);
  124. }
  125.  
  126. }
  127.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
6
4
2