Dando continuidade ao nosso Curso de Programação C, vamos nesta aula desenvolver um procedimento para imprimir e testar nossa estrutura de dados FILA.
Para imprimir a fila precisamos apenas receber um ponteiro para o primeiro Nó da fila. Há vária formas de imprimir uma fila. Uma forma muito simples é por meio de recursão. Enquanto o ponteiro for diferente de nulo, imprime o valor e chama novamente o procedimento passando como parâmetro o ponteiro para o próximo Nó. Contudo, sempre que possível é melhor evitar o uso de recursão. Assim, podemos imprimir a fila com uma repetição do tipo enquanto. Enquanto o ponteiro for diferente de nulo, imprime o valor e segue para o Nó seguinte, como feito a seguir.
/*
Procedimento para imprimir a fila
*/
void imprimir(No *fila){
printf("\t------- FILA --------\n\t");
while(fila){
printf("%d ", fila->valor);
fila = fila->proximo;
}
printf("\n\t------- FIM FILA --------\n");
}
Código completo em C para inserir, remover e imprimir uma estrutura de dados do tipo fila
/*
Código escrito por Wagner Gaspar
Julho de 2021
Aula 238: Imprimindo e testando nossa FILA
FIFO - First-In, First-Out - Primeiro a Entrar, Primeiro a Sair
*/
typedef struct no{
int valor;
struct no *proximo;
}No;
void inserir_na_fila(No **fila, int num){
No *aux, *novo = malloc(sizeof(No));
if(novo){
novo->valor = num;
novo->proximo = NULL;
if(*fila == NULL)
*fila = novo;
else{
aux = *fila;
while(aux->proximo)
aux = aux->proximo;
aux->proximo = novo;
}
}
else
printf("\nErro ao alocar memoria.\n");
}
No* remover_da_fila(No **fila){
No *remover = NULL;
if(*fila){
remover = *fila;
*fila = remover->proximo;
}
else
printf("\tFila vazia\n");
return remover;
}
void imprimir(No *fila){
printf("\t------- FILA --------\n\t");
while(fila){
printf("%d ", fila->valor);
fila = fila->proximo;
}
printf("\n\t------- FIM FILA --------\n");
}
int main(){
No *r, *fila = NULL;
int opcao, valor;
do{
printf("\t0 - Sair\n\t1 - Inserir\n\t2 - Remover\n\t3 - Imprimir\n");
scanf("%d", &opcao);
switch(opcao){
case 1:
printf("Digite um valor: ");
scanf("%d", &valor);
inserir_na_fila(&fila, valor);
break;
case 2:
r = remover_da_fila(&fila);
if(r){
printf("Removido: %d\n", r->valor);
free(r);
}
break;
case 3:
imprimir(fila);
break;
default:
if(opcao != 0)
printf("\nOpcao invaluda!\n");
}
}while(opcao != 0);
return 0;
}
