Pilhas em C

Publicado por Ivan Rocha 18/07/2007

[ Hits: 6.778 ]

Homepage: http://homes.dcc.ufba.br/~ivan062/bahia

Download Pilhas




Pilhas em C como um cadastro de funcionários, com as funções Empilha, Desempilha e Topo, utilizando apontadores.

  



Esconder código-fonte

# include  <stdio.h>
# include <stdlib.h>
# include <string.h>

typedef struct registro{
   char nome[20];
   int num;
   float salario;
   struct registro *embaixo;
}Pilha;

/*FUNCAO INICIALIZA*/

void inicializa(Pilha **pilha){
   *pilha = NULL;
}


/*FUNCAO PRA A LIMPEZA DO BUFFER DO TECLADO*/

void flush_in()
{
   int ch;
   while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){}
}


/*FUNCAO TOPO*/

void topo(Pilha *pilha){
   if (pilha != NULL){
      printf("\n|TOPO|\n\n");
      printf("Nome: %s\n", pilha -> nome);
      printf("Numero: %d\n", pilha -> num);
      printf("Salario: %.2f\n", pilha -> salario);
      getchar();
      //flush_in();
   }
}


/*FUNCAO VAZIA*/

int vazia(Pilha *pilha){
   if(pilha == NULL){
      return (1);
   }else
      return (0);
}

/*FUNCAO EMPILHA*/

void empilha(Pilha **pilha){
   Pilha *novoFunc;
   int numero;
   
   printf("\nEmpilha quantos? ");
   scanf("%d", &numero);
   for(numero; numero > 0; numero--){
      novoFunc = ((Pilha *)malloc(sizeof(Pilha)));
      printf("\n|Funcionario|\n\n");
      printf("Nome: ");
      scanf("%s", novoFunc -> nome);
      flush_in();
      printf("Codigo: ");
      scanf("%d", &novoFunc -> num);
      flush_in();
      printf("Salario: ");
      scanf("%f", &novoFunc -> salario);
      novoFunc -> embaixo = NULL; 
      
      if(vazia(*pilha)){
         *pilha = novoFunc;
      }else{
         novoFunc -> embaixo = *pilha;
         *pilha = novoFunc;
      }
   }
}


/*FUNCAO DESEMPILHA*/

void desempilha(Pilha **pilha){
   Pilha *pont; 
   int numero;
   
   printf("\nDesempilha quantos? ");
   scanf("%d", &numero);
   flush_in();
   for(numero; numero > 0; numero--){
      if(!vazia(*pilha)){
         pont = *pilha;
         *pilha = (*pilha) -> embaixo;
         free(pont);
      }
   }
}


/*FUNCAO CONSULTA*/

void consulta(Pilha *pilha){
   int numero;
   
   printf("\nNumero: ");
   scanf("%d", &numero);
   if(pilha != NULL){
      while(pilha){
         if(pilha -> num == numero){
            printf("\nNome: %s\n", pilha -> nome);
            printf("Codigo: %d\n", pilha -> num);
            printf("Salario: %.2f\n", pilha -> salario);
            getchar();
            flush_in();
            break;
         }else
            pilha = pilha -> embaixo;
      }
   }
}

/*FUNCAO PRINCIPAL*/

int main(){
   
   char op[1];
   Pilha *pilha;
   
   inicializa(&pilha);
   for(;;){
      system("clear");
      printf("===== Programa PILHA =====\n\n");
      printf("Sequencia de Operacoes:\n\n");
      printf("a. Empilha; \n");
      printf("b. Desempilha; \n");
      printf("c. Consulta;\n");
      printf("d. Topo;\n");
      printf("s. SAIR.\n\n");
      printf("OPCAO: ");
      scanf("%s", op);
      flush_in();
      switch(toupper(op[0])){
         case 'A':{
            empilha(&pilha);
         }break;
         case 'B':{
            desempilha(&pilha);
         }break;
         case 'C':{
            consulta(pilha);
         }break;
         case 'D':{
            topo(pilha);
         }break;
         case 'S':{
            printf("\nTem certeza? (S/N) ");
            scanf("%s", op);
            flush_in();
            if (toupper(op[0]) == 'S'){
               system("clear");
               exit(0);
            }
         }break;
      }
   }

   return 0;
}

Scripts recomendados

Verifica digito do rg de SP

Ordenando valores

Peso Ideal

De quantas maneiras pode-se preencher um tabuleiro de xadrez com dominós

Caos nos Números


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts