Advertisement
Jonas_3k

/*-PILHA@-*/

Mar 29th, 2012
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4.  
  5. void Clean(void)
  6. {
  7.     #ifndef WIN32
  8.         sleep(1);
  9.         system("clear");
  10.     #else
  11.         sleep(1500);
  12.         system("cls");
  13.     #endif
  14.     return;
  15. }
  16.  
  17. typedef struct A
  18. {
  19.     int dado;
  20.     struct A *nelem,*ant;
  21. }pil;
  22.  
  23. void push(pil**);
  24. void pop(pil**);
  25. pil *top(pil*);
  26. char upcase(char);
  27.  
  28. int main()
  29. {
  30.     pil *pilha = NULL;
  31.     char opc;
  32.     do{
  33.         Clean();/* um segundo antes de apagar.*/
  34.         printf("Oque deseja fazer: \n[I]nserir um elemento\t[M]ostrar o elemento no topo\t[R]emover um elemento\n# ");
  35.         scanf("%c",&opc);
  36.         fflush(stdin);
  37.         switch(upcase(opc))
  38.         {
  39.             case 'I': push(&pilha); break;
  40.             case 'M': {
  41.                         pil *aux;
  42.                         aux = top(pilha);
  43.                         if(aux == NULL) printf("\nPilha vazia!\n");
  44.                         else  printf(" Ultimo elemento da pilha %d \n\n",aux->dado);
  45.                         getch();
  46.                         break;
  47.                       }
  48.  
  49.             case 'R': pop(&pilha); break;
  50.             default : printf("Opcao incorreta.\n");
  51.         }
  52.  
  53.     }while( opc != 'S');
  54. }
  55.  
  56. char upcase(char c)
  57. {
  58.     int v = (int) c;
  59.     if ( ( v >= 65 ) && ( v <= 90 ) ) return c;
  60.     else return (char) v - 32;
  61. }
  62.  
  63. void push(pil **pilha)
  64. {
  65.     pil *aux = NULL,*novo = NULL;
  66.     int dado;
  67.  
  68.     printf("Entre com um dado ");
  69.     scanf("%d",&dado);
  70.  
  71.     if((*pilha) == NULL)
  72.     {
  73.         novo = (pil *) malloc(sizeof(pil));
  74.         novo->dado = dado;
  75.         novo->ant = NULL;
  76.         novo->nelem = NULL;
  77.         *pilha = novo;
  78.     }
  79.  
  80.     else
  81.     {
  82.         aux = top(*pilha);
  83.         novo = (pil *) malloc(sizeof(pil));
  84.         novo->nelem = NULL;
  85.         novo->ant = aux;
  86.         novo->dado = dado;
  87.         aux->nelem = novo;
  88.     }
  89. }
  90.  
  91. pil *top(pil *p)
  92. {
  93.     pil *pilha;
  94.     pilha = p;
  95.  
  96.     if(pilha == NULL)
  97.     {
  98.         return pilha;
  99.     }
  100.  
  101.     else
  102.     {
  103.         while(pilha->nelem != NULL ) pilha = pilha->nelem;
  104.         return pilha;
  105.     }
  106.  
  107. }
  108.  
  109. void pop(pil **pilha)
  110. {
  111.     if( *pilha == NULL )
  112.     {
  113.         printf("Pilha vazia!");
  114.         return;
  115.     }
  116.  
  117.     else
  118.     {
  119.         pil *aux;
  120.         aux = top(*pilha);
  121.         if(aux->ant == NULL)
  122.         {
  123.             *pilha = NULL;
  124.         }
  125.         else
  126.         {
  127.             (aux->ant)->nelem = NULL;
  128.             free(aux);
  129.         }
  130.         return;
  131.     }
  132.  
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement