Make Even and Odd List

Asked

Viewed 231 times

0

I made a code where the user will insert an unlimited amount of numbers in a dynamic chained list until they type 0 and stop the insertion, showing at the end, all the numbers typed by the user. Now I want to check the values entered by the user and divide them into a list of even numbers and another list of odd numbers. Can someone help me unroll the rest of that code?

code I’ve made so far:

#include <stdio.h>
#include <stdlib.h>

typedef struct ponto{
    int num;
    struct ponto * proximo; //PONTEIRO PARA O PRÓXIMO ELEMENTO
}t_ponto; //QUANDO FOR DECLARAR UMA VARIÁVEL NÃO SERÁ PRECISO DECLARAR TODO O "STRUCT", BASTA DECLARAR O t_ponto


int main (){
    
    t_ponto * ini_ponto; //PONTEIRO QUE MARCA O INÍCIO DA LISTA
    t_ponto * proximo_ponto; //PONTEIRO QUE MARCA O PRÓXIMO PONTEIRO DA LISTA
    
    int resp; //VARIÁVEL PARA COLETAR A RESPOSTA DO USUÁRIO
    ini_ponto = (t_ponto *) malloc (sizeof(t_ponto)); //ALOCANDO A MEMÓRIA
    
    if(ini_ponto == NULL){ //TESTANDO SE A LISTA ESTÁ VAZIA
        exit(1);
    };
    
    proximo_ponto = ini_ponto; //PRÓXIMO PONTO ESTÁ AGORA APONTANDO PARA O INÍCIO DA LISTA
    
    while(1){
        
        printf("Digite um numero para inserir na lista: ");
        scanf("%d", &proximo_ponto->num); //A VARIÁVEL DE UMA STRUCT É ACESSADA ATRAVÉS DA "->" 
        
        printf("Deseja continuar? <1> SIM <0> NAO: ");
        scanf("%d", &resp);
        
        if(resp == 1){
            proximo_ponto->proximo = (t_ponto *) malloc (sizeof(t_ponto)); //AQUI ESTAMOS ALOCANDO A MEMÓRIA PARA O PRÓXIMO ELEMENTO
            proximo_ponto = proximo_ponto->proximo;
        } else
            break;
        
    }

    
    printf("\n");
    
    proximo_ponto->proximo = NULL; //DIZENDO QUE A LISTA CHEGOU AO FIM, CASO O USUÁRIO NÃO QUEIRA MAIS INSERIR NÚMEROS
    proximo_ponto = ini_ponto; //APONTANDO PARA O INÍCIO DA LISTA PARA COMEÇAR A LISTÁ-LA.
    
    while(proximo_ponto != NULL){
        printf("Os valores da lista original sao: %d;\n", proximo_ponto->num);
        proximo_ponto = proximo_ponto->proximo;
    }
    
    return 0;
}
  • But it is to insert right into two different lists or you have to insert everything in a list to then split in two ?

1 answer

0

Create two lists. One for even numbers and one for odd numbers.

Then go through your list with the go and test within it if a number is even or odd.

You can do this by dividing the number by 2 and taking the rest of the division. If the rest of the division is equal to 1, it means that the number is odd.

Example:

for(int i = 0; i < tamanhoDaLista; i++){
   
   // Pego o resto da divisão por 2
   int restoDivisao = lista[i] % 2;
   

   if(restoDivisao == 1){ //Se for igual a 1 significa que é um número ímpar

      // Código para adicionar o número na lista de valores ímpares

   } else {

      // Código para adicionar o número na lista de valores pares

   }

}
  • In this code you have put, you are working with vectors. In the code I am trying to do I am working with dynamic lists.

  • The idea is the same, you just need to adapt your code to the idea. Scroll through the dynamic list, access its value, divide by 2 and take the rest of the division to test in if. I have no way to create the complete code for you, because I don’t know how you structured your classes and how you can access and browse the list.

  • This is the case. I’m not able to abstract it. I’m working with pointers and I don’t know how to go through a dynamic list.

  • I don’t know much about C. But from what I saw in your code, you scroll through the list in this section: while(proximo_dot != NULL){ printf("The values of the original list are: %d; n", proximo_point->num); proximo_point = proximo_point->proximo; }

  • The idea is this, go through the list and instead of displaying the values, divide them by 2 and take the rest of the division to test in if.

  • on a dynamic list. the elements have a pointer to the address of the next value, just do this to go through your entire list, until you get to the last element that will not have the pointer, will be null in case, ai for each element is just play in the if and separate in other two lists..

Show 1 more comment

Browser other questions tagged

You are not signed in. Login or sign up in order to post.