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");
}