Pilhas em C

Publicado por Ivan Rocha 18/07/2007

[ Hits: 6.786 ]

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

Codigo anscii

Média das idades

Cálculo de Energia de um Corpo

Função simples sendo chamada dentro da main

NOÇÕES DE ARITMÉTICA DE PONTEIROS


  

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