Advertisement
ricardorichsn

pilha.c

Dec 18th, 2014
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. #define capacidade 10
  5.  
  6. typedef struct {
  7.     int topo;
  8.     int elemento[capacidade];
  9. }pilha;
  10.  
  11. //protótipos de funções
  12. void init(pilha *p);
  13. int push(pilha *p, int valor);
  14. int pop(pilha *p, int *valor);
  15. int is_empty(pilha *p);
  16. int is_full(pilha *p);
  17. int top(pilha *p);
  18. int size(pilha *p);
  19. void imprimir(pilha *p);
  20.  
  21. int main() {
  22.    
  23.     int op = 0, valor;
  24.     pilha novapilha;
  25.     pilha *p;
  26.     p = &novapilha;
  27.    
  28.     init(p);
  29.    
  30.     do{
  31.         system("clear");
  32.         printf("<<PILHA>>\n");
  33.         printf("(1) Inserir\n(2) Remover\n(3) Imprimir\n(4) Ultimo da Lista\n(5) Tamanho da Lista\n");
  34.         scanf("%d", &op);
  35.         if(op < 1 || op > 6)
  36.             printf("\nOpcao invalida!");
  37.         else {
  38.            
  39.             switch(op){
  40.                 case 1:{
  41.                     printf("Digite um valor para ser inserido na pilha: ");
  42.                     scanf("%d", &valor);
  43.                     push(p, valor);                
  44.                     break;
  45.                 }
  46.                 case 2:{
  47.                     pop(p, &valor);
  48.                     printf("Valor que vai ser removido da lista: %d", valor);
  49.                     break;
  50.                 }
  51.                 case 3:{
  52.                     imprimir(p);
  53.                     printf("pressione ");
  54.                     break;
  55.                 }
  56.                 case 4:{
  57.                     printf("\n%d", top(p));
  58.                     break;
  59.                 }
  60.                 case 5:{
  61.                     printf("\n%d", size(p));
  62.                     break;
  63.                 }
  64.                 default:
  65.                     break;
  66.             }
  67.         }      
  68.     }while(op != 6);
  69.    
  70.     return 0;
  71. }
  72.  
  73. //Operações fundamentais
  74. void init(pilha *p) {
  75.    
  76.     p->topo = -1;
  77. }
  78.  
  79. int push(pilha *p, int valor) {
  80.    
  81.     if(is_full(p))
  82.         return 0;
  83.     else{
  84.         p->elemento[++p->topo] = valor;
  85.         return 1;
  86.     }
  87. }
  88.  
  89. int pop(pilha *p, int *valor) {
  90.    
  91.     if(is_empty(p))
  92.         return 0;
  93.     else{
  94.         *valor = p->elemento[p->topo--];
  95.         return 1;
  96.     }
  97. }
  98.  
  99. void imprimir(pilha *p) {
  100.    
  101.     int i;
  102.    
  103.     if(is_empty(p))
  104.         printf("\nPilha Vazia!");
  105.     else
  106.         for(i = 0; i <= p->topo; i++)
  107.             printf("Posicao: %d | Elemento: %d\n ", i, p->elemento[i]);
  108. }
  109. //Operações Auxiliares
  110. int top(pilha *p) {
  111.    
  112.     return p->elemento[p->topo];
  113. }
  114.  
  115. int size(pilha *p) {
  116.    
  117.     return p->topo+1;
  118. }
  119.  
  120. int is_empty(pilha *p) {
  121.    
  122.     return (p->topo == -1);
  123. }
  124.  
  125. int is_full(pilha *p) {
  126.    
  127.     return (p->topo == capacidade-1);
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement