aula 238

Imprimindo e testando nossa estrutura de dados FILA

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

Deixe um comentário

17 + catorze =

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.