Implemente uma lista dinâmica de números positivos em que os números ímpares fiquem todos juntos no início da lista e os pares fiquem todos juntos no final da lista
b. Implementa a função INIC que permite fazer a carga inicial da lista

Passo 1

Beleza, vamos lá! O que a gente precisa fazer aqui é implementar uma função chamada INIC que vai permitir carregar inicialmente uma lista dinâmica de números positivos. Nessa lista, todos os números ímpares devem ficar juntos no começo, e os números pares devem ficar juntos no final. Para isso, vamos precisar entender sobre estruturas de dados, especificamente listas dinâmicas, e como manipular nós dentro dessa lista para organizar os números conforme a regra dada.

Passo 2

Primeiro, vamos definir como será a nossa lista dinâmica. Em programação, uma lista dinâmica é uma estrutura que pode crescer e diminuir conforme adicionamos ou removemos elementos. Para isso, vamos usar uma estrutura chamada “nó”, que contém o valor do número e um ponteiro para o próximo nó na lista.

Passo 3

Vamos criar a estrutura do nó em C, por exemplo:
typedef struct No {
    int valor;
    struct No* proximo;
} No;
Aqui, cada nó tem um campo valor para armazenar o número e um ponteiro proximo que aponta para o próximo nó na lista.

Passo 4

Agora, vamos implementar a função INIC que vai receber um array de números e criar a lista dinâmica organizada com os ímpares primeiro e os pares depois. A ideia é percorrer o array de entrada, verificar se cada número é ímpar ou par e adicioná-lo na posição correta da lista.

Passo 5

Para verificar se um número é ímpar ou par, usamos o operador módulo %. Se numero % 2 != 0, o número é ímpar; caso contrário, é par. Vamos manter dois ponteiros, um para a parte dos ímpares e outro para a parte dos pares, e conectar as duas partes no final.

Passo 6

Vamos ao código da função INIC:
#include <stdio.h>
#include <stdlib.h>

typedef struct No {
    int valor;
    struct No* proximo;
} No;

typedef struct Lista {
    No* inicio;
    No* fim;
} Lista;

Lista* INIC(int* elementos, int tamanho) {
    Lista* lista = (Lista*)malloc(sizeof(Lista));
    lista->inicio = NULL;
    lista->fim = NULL;

    No* inicioImpares = NULL;
    No* fimImpares = NULL;
    No* inicioPares = NULL;
    No* fimPares = NULL;

    for(int i = 0; i < tamanho; i++) {
        No* novo = (No*)malloc(sizeof(No));
        novo->valor = elementos[i];
        novo->proximo = NULL;

        if(novo->valor % 2 != 0) { // Ímpar
            if(inicioImpares == NULL) {
                inicioImpares = novo;
                fimImpares = novo;
            } else {
                fimImpares->proximo = novo;
                fimImpares = novo;
            }
        } else { // Par
            if(inicioPares == NULL) {
                inicioPares = novo;
                fimPares = novo;
            } else {
                fimPares->proximo = novo;
                fimPares = novo;
            }
        }
    }

    if(inicioImpares != NULL) {
        lista->inicio = inicioImpares;
        if(inicioPares != NULL) {
            fimImpares->proximo = inicioPares;
            lista->fim = fimPares;
        } else {
            lista->fim = fimImpares;
        }
    } else {
        lista->inicio = inicioPares;
        lista->fim = fimPares;
    }

    return lista;
}

Resposta

Prontinho! A função INIC está implementada e agora você pode usá-la para criar uma lista dinâmica onde os números ímpares ficam juntos no início e os pares no final.

Exercícios relacionados