aula 237

Como remover um elemento em uma estrutura de dados do tipo FILA?

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

Deixe um comentário

13 + dezenove =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.