Filas em C

Publicado por Ivan Rocha 16/07/2007

[ Hits: 13.343 ]

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

Download Filas




Implementação de filas em C, com funções enfileira, desenfileira, e consulta.

  



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 *frente;
}Fila;

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

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


/*FUNCAO INICIALIZA*/

void inicializa(Fila **fila, Fila **ult){
   *fila = NULL;
   *ult = NULL;
}


/*FUNCAO ENFILEIRA*/

void enfileira(Fila **fila, Fila **ult){
   Fila *novoFunc;
   int numero;
   
   printf("\nEnfileirar Quantos? ");
   scanf("%d", &numero);
   flush_in();
   for(numero; numero > 0; numero--){
      novoFunc = ((Fila *)malloc(sizeof(Fila)));
      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 -> frente = NULL;

      if(*fila == NULL){
         *fila = novoFunc;
         *ult = novoFunc;
      }else{
         (*ult) -> frente = novoFunc;
         *ult = (*ult) -> frente;
      }
   }
}


/*FUNCAO DESENFILEIRA*/

void desenfileira(Fila **fila, Fila **ult){
   Fila *pont;
   int numero;
   
   printf("\nDesenfileirar Quantos? ");
   scanf("%d", &numero);
   flush_in();
   for(numero; numero > 0; numero--){
      if(*fila != NULL){
         if(*fila == *ult){
            pont = *ult;
            *fila = NULL;
            *ult = NULL;
            free(pont);
         }else{
            pont = *fila;
            *fila = (*fila) -> frente;
            free(pont);
         }
      }
   }
}

/*FUNCAO CONSULTA*/

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

/*FUNCAO PRINCIPAL*/

int main(){
   char op[1];
   Fila *fila;
   Fila *ult;
   
   inicializa(&fila, &ult);
   for(;;){
      system("clear");
      printf("===== Programa FILA =====\n\n");
      printf("Sequencia de Operacoes:\n\n");
      printf("a. Enfileira; \n");
      printf("b. Desenfileira; \n");
      printf("c. Consulta;\n");
      printf("s. SAIR.\n\n");
      printf("OPCAO: ");
      scanf("%s", op);
      flush_in();
      switch(toupper(op[0])){
         case 'A':{
            enfileira(&fila, &ult);
         }break;
         case 'B':{
            desenfileira(&fila, &ult);
         }break;
         case 'C':{
            consulta(fila, ult);
         }break;
         case 'S':{
            printf("\nTem certeza? (S/N) ");
            scanf("%s", op);
            flush_in();
            if (toupper(op[0]) == 'S'){
               system("clear");
               exit(0);
            }
         }break;
      }
   }
}

Scripts recomendados

Função simples sendo chamada dentro da main

Quantos números primos você quizer!!!

Pesquisa da Prefeitura

Classificação de triângulos

Pirâmide Quadrangular


  

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