Pilhas em C

Publicado por Ivan Rocha 18/07/2007

[ Hits: 6.485 ]

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

Formatador do linux

Cria os dígitos verificadores para CPF

Tabuada em C

Progressões Aritméticas e Geométricas (PA e PG)

Script de caixa eletrônico em 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