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; }