Filas em C

Publicado por Ivan Rocha 16/07/2007

[ Hits: 13.309 ]

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

Acendedor de leds pela porta paralela

Uso do comando for e printf

Decremento e incremento

Pares com stdlib

Sistema de alunos 1.0


  

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