Pilhas em C

Publicado por Ivan Rocha 18/07/2007

[ Hits: 6.483 ]

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

Arquivo introdutório para chamadas de funções

Perguntas

Script Acadêmico - Matrizes em C

Ordenando números em arquivo

Cálculo do M.D.C


  

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