Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

×

Informação importante

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