Advertisement
Guest User

adedonha

a guest
Nov 21st, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.89 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //#define topo(pilha) pilha->start->numero
  4.  
  5.  
  6.  
  7. typedef struct No
  8. {
  9.     int numero;
  10.     struct No* ProxNo;
  11. }No;
  12.  
  13.  
  14. int size;
  15.  
  16.  
  17. void start(No* pilha)
  18. {
  19.     pilha->ProxNo = NULL;
  20.     size = 0;
  21. }
  22.  
  23. int vazia(No* pilha)
  24. {
  25.     if (pilha->ProxNo == NULL)
  26.     {
  27.         return 1;
  28.     }
  29.     else {
  30.         return 0;
  31.     }
  32. }
  33.  
  34. No* aloca()
  35. {
  36.     No* novo = (No*)malloc(sizeof(No));
  37.     if (!novo) {
  38.         printf("Sem memoria.\n");
  39.         exit(1);
  40.     }
  41.     else {
  42.         printf("Digite o numero: ");
  43.         scanf("%d", &novo->numero);
  44.         return novo;
  45.     }
  46. }
  47.  
  48. void imprimir(No* pilha)
  49. {
  50.  
  51.     if (vazia(pilha))
  52.     {
  53.         printf("Pilha esta vazia\n");
  54.         return;
  55.     }
  56.     No* ct;
  57.     ct = pilha->ProxNo;
  58.     printf("\nPilha: ");
  59.     while (ct != NULL) {
  60.         printf("%5d\n", ct->numero);
  61.         ct = ct->ProxNo;
  62.     }
  63. }
  64.  
  65. void libera(No* pilha)
  66. {
  67.     if (!vazia(pilha))
  68.     {
  69.         No* nextNo, * atual;
  70.  
  71.         atual = pilha->ProxNo;
  72.  
  73.         while (atual != NULL)
  74.         {
  75.             nextNo = atual->ProxNo;
  76.             free(atual);
  77.             atual = nextNo;
  78.  
  79.         }
  80.     }
  81.  
  82. }
  83.  
  84.  
  85. void PUSH(No* pilha)
  86. {
  87.  
  88.     No* novo = aloca();
  89.     novo->ProxNo = NULL;
  90.  
  91.     if (vazia(pilha))
  92.     {
  93.         pilha->ProxNo = novo;
  94.     }
  95.     else
  96.     {
  97.         No* temp = pilha->ProxNo;
  98.  
  99.         while (temp->ProxNo != NULL)
  100.         {
  101.             temp = temp->ProxNo;
  102.  
  103.         }
  104.  
  105.         temp->ProxNo = novo;
  106.     }
  107.  
  108.     size++;
  109. }
  110.  
  111. No* POP(No* pilha)
  112. {
  113.     if (pilha->ProxNo == NULL) {
  114.         printf("Pilha ja esta vazia\n");
  115.         return NULL;
  116.     }
  117.     else
  118.     {
  119.         No* ultimo = pilha->ProxNo, * penultimo = pilha;
  120.  
  121.         while (ultimo->ProxNo != NULL) {
  122.             penultimo = ultimo;
  123.             ultimo = ultimo->ProxNo;
  124.         }
  125.  
  126.         penultimo->ProxNo = NULL;
  127.         size--;
  128.         return ultimo;
  129.     }
  130. }
  131.  
  132.  
  133.  
  134. void topo(No* pilha) {
  135.  
  136.     if (vazia(pilha))
  137.     {
  138.         printf("Não ha numeros na pilha\n");
  139.         return;
  140.     }
  141.    
  142.     No* topor;
  143.     topor = pilha->ProxNo;
  144.  
  145.     while(topor != NULL)
  146.     {
  147.         topor = topor->ProxNo;
  148.     }
  149.     printf("\nTopo da Pilha: %d", topor->numero);
  150.     //printf("%d\n", ct->numero);
  151.     }
  152.  
  153.  
  154.  
  155.  
  156. int menu(void)
  157. {
  158.     int c;
  159.  
  160.     printf("\nSelecione sua opção:\n");
  161.     printf("1. Exibir Pilha\n");
  162.     printf("2. Zerar Pilha\n");
  163.     printf("3. PUSH\n");
  164.     printf("4. POP\n");
  165.     printf("5. Sair\n");
  166.     printf("6. Imprime o topo\n");
  167.     printf("Opcao: ");
  168.     scanf("%d", &c);
  169.  
  170.     return c;
  171. }
  172.  
  173.  
  174. void selecionar(No* pilha, int slct)
  175. {
  176.     No* temp;
  177.     switch (slct) {
  178.     case 1:
  179.         imprimir(pilha);
  180.         break;
  181.  
  182.     case 2:
  183.         libera(pilha);
  184.         start(pilha);
  185.         break;
  186.  
  187.     case 3:
  188.         PUSH(pilha);
  189.         break;
  190.  
  191.     case 4:
  192.         temp = POP(pilha);
  193.         if (temp != NULL)
  194.             printf("Ultimo retirado: %3d\n", temp->numero);
  195.         break;
  196.  
  197.     case 5:
  198.         exit(1);
  199.         break;
  200.  
  201.     case 6:
  202.         topo(pilha);
  203.         break;
  204.  
  205.     default:
  206.         printf("Comando invalido\n");
  207.         return;
  208.     }
  209. }
  210.  
  211.  
  212.  
  213. int main() {
  214.     No* pilha = (No*)malloc(sizeof(No));
  215.     if (!pilha) {
  216.         printf("Sem memoria\n");
  217.         exit(1);
  218.     }
  219.     else {
  220.         start(pilha);
  221.         int c;
  222.  
  223.         do {
  224.             c = menu();
  225.             selecionar(pilha, c);
  226.         } while (c);
  227.  
  228.         free(pilha);
  229.         return 0;
  230.     }
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement