Na aula de hoje, dando continuidade ao nosso Curso de Programação C, vamos aprender como remover um elemento em uma estrutura de dados do tipo FILA.
Como vimos na parte teórica, a estrutura fila é bastante similar a uma fila no mundo real. Novas inserções são feitas sempre no final (exceto em filas de prioridades que veremos mais a frente) enquanto remoções sempre são feitas no início da fila.
Como precisamos remover o primeiro Nó da fila, isso implica em alterar o conteúdo da nossa variável fila declarada na função main. Para fazer isso vamos receber como parâmetro um ponteiro para ponteiro, que é o endereço da variável fila declarada na função main.
Se o conteúdo apontado por este ponteiro for diferente de nulo, então criamos um ponteiro remover para o primeiro Nó e alteramos o conteúdo do ponteiro fila para o próximo Nó de remover. Caso contrário é retornado um ponteiro nulo, indicando que a fila está vazia.
Função para remover o primeiro nó da estrutura fila
/* Função para remover um Nó da fila */ No* remover_da_fila(No **fila){ No *remover = NULL; if(*fila){ remover = *fila; *fila = remover->proximo; } else printf("\tFila vazia\n"); return remover; }
Código em C para inserir e remover da estrutura de dados fila
/* Código escrito por Wagner Gaspar Julho de 2021 Aula 237: Como remover um elemento da estrutura 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; } 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 a fila break; default: if(opcao != 0) printf("\nOpcao invaluda!\n"); } }while(opcao != 0); return 0; }