Filas em C
Publicado por Ivan Rocha 16/07/2007
[ Hits: 13.586 ]
Homepage: http://homes.dcc.ufba.br/~ivan062/bahia
Implementação de filas em C, com funções enfileira, desenfileira, e consulta.
# 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;
}
}
}
Converte Farenheit para Celsius
Cálculo de Bhaskara para raízes reais e complexas
Determinar maior número com função
Trabalhando com argumentos e ponteiros
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Assisti Avatar 3: Fogo e Cinzas (3)
Conky, alerta de temperatura alta (8)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (42)









