Filas em C

Publicado por Ivan Rocha 16/07/2007

[ Hits: 13.294 ]

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

Tipos de ordenação - BubbleSort - SelectSort - Shellsort - Mergesort

Usando uma header...

Parte 5 (ORDENANDO NUMEROS) - Sessão de estudo sobre MATRIZES

Função Multiplicação

Cálculo de Fatorial com 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