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
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.