Filas em C

Publicado por Ivan Rocha 16/07/2007

[ Hits: 13.276 ]

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

Tabuada

Função Busca Caractere

Mudar nome do processo

Par ou Ímpar

Números primos


  

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