Ir para conteúdo
filipedahlem

Erro no código em C para Lista Simplesmente Encadeada

Recommended Posts

Boa noite Pessoal,

Estou fazendo um exercício de estrutura de dados, usando Linguagem C para fazer ponteiros.. Porém o código está com o problema de lixo de memoria se conseguirem me auxiliar, fico grato.
O enunciado é o seguinte:

I – Implemente um Programa em Linguagem C ou em Português Estruturado, que sorteie 20 valores
inteiros [0-100] na Função main ou Função Principal e após implemente as seguintes funções:

A partir dos valores sorteados verifique:
• se o valor for par insira à direita na Lista Simplesmente Encadeada – Função InsereDireita;
• se o valor for ímpar insira à esquerda na Lista Simplesmente Encadeada – Função InsereEsquerda;

• Observação: deverá existir apenas uma lista – todos os valores devem ser direcionados para a mesma, utilizando o mesmo ponteiro de início. Ao final a lista estará dividida: no início dos
ímpares e no final os pares;

 

Segue abaixo meu código:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#define tamanho 20

typedef struct nodo{
    int dados;
    struct nodo *proximo;
}Node;


void insereEsquerda(Node **ptr_ini, int num_rand);
void insereDireita(Node **ptr_ini, int num_rand);

void imprimeLSE(Node **ptr_ini);

int main(){
    Node* ptr_ini = (Node *) malloc( sizeof (Node) );
    ptr_ini->proximo=NULL;
    int i, num_rand, maior;
    for(i=0; i<tamanho; i++){
        num_rand= rand()%100;
        if(num_rand % 2 == 0){
            insereDireita(&ptr_ini, num_rand);
        }else{
            //lixo de memoria aqui
            insereEsquerda(&ptr_ini, num_rand);
        }
    }

    printf("\n\n--- lista de numeros impares e pares ---\n");
    imprimeLSE(&ptr_ini);

    printf("\nFim do programa");
    getch();
}

Node *alocar(){
    Node *novoNode = (Node *)malloc(sizeof(Node));
    if(!novoNode){
        printf("Erro ao alocar na memoria");
        exit(1);
    }else{
        return novoNode;
    }
}

void insereEsquerda(Node **ptr_ini, int num_rand){

    Node *novoNode=    alocar();

        novoNode->dados = num_rand;
        novoNode->proximo = NULL;

         if (*ptr_ini != NULL)
        novoNode->proximo = *ptr_ini;

    *ptr_ini = novoNode;
}

void insereDireita(Node**ptr_ini, int num_rand){

    Node *novoNode=    alocar();
    Node *aux=NULL;
    aux=*ptr_ini;
    novoNode->dados = num_rand;
    novoNode->proximo = NULL;

    if(*ptr_ini == NULL){
        printf("\nponteiro inicial nulo\n");
        *ptr_ini = novoNode;
    }else{

    while(aux->proximo!=NULL){
        aux=aux->proximo;
    }

    aux->proximo = novoNode;
    printf("\n%d insereDireita", num_rand);
    }

}
void imprimeLSE(Node **ptr_ini){

     Node *aux=NULL;
     aux = *ptr_ini;

     if(*ptr_ini == NULL){
         printf("\n Lista vazia \n");
         return;
     }
    while(aux->proximo != NULL) {

        printf("\n%d", aux->dados);
        aux= aux->proximo;
    }
    printf("\nfim da impressao");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.