Lista Encadeada

1. Lista Encadeada

Cristiam
Dean_Winchester

(usa Outra)

Enviado em 01/04/2015 - 00:42h

Boa Noite ,

tenho a seguinte duvida , criei uma estrutura.
typedef struct Registro
{
int conteudo;
struct Registro *Proximo;
}Registro;

e uma funcao para criar um no ;

Registro * Novo_No(int conteudo)
{
Registro *Novo;
Novo = malloc(sizeof(Registro));
Novo->conteudo = conteudo;
Novo->Proximo =NULL;
return(Novo);
}


e uma para inserir na lista

void Inserir (Registro *P,int conteudo)
{
Registro *Novo;
if(P != NULL)
{
P = Novo_No(conteudo);
}
else
{
Novo = Novo_No(conteudo);
Novo->Proximo = P->Proximo;
P->Proximo = Novo;
}
}

porem quando chamo na main , o ponteiro volta vazio

int main ( int argc, char **argv)
{
Registro *p;
Inserir(p,3);
return(0);
}
alguem pode me ajudar?


  


2. Falta informações para ajuda.

Reis
gnu_reis

(usa Slackware)

Enviado em 08/04/2015 - 17:27h

Saudações!

Sua dúvida carece de esclarecimentos, mas pelo que pude analisar nos fragmentos de seu código, há alguns problemas, seguem os principais:
1 - não tem uma parte do código que inicia o ponteiro p da função main;
2 - no if da função Inserir há uma incoerência, pois se o ponteiro P for igual a NULL não é possível acessar o ponteiro P->Proximo, nesse caso, acredito que você inverteu a lógica;
3 - Na função Inserir o ponteiro Registro *P, que é declarado no parâmetro, passa a apontar para outro endereço no meio do código, assim quando a função é finalizada, os valores do novo ponteiro é perdido. Para contornar esse problema, você precisa de um ponteiro para outro ponteiro (**), o que não é o último recurso para esse tipo de código.

Espero ter sido claro, mas se tiver mais dúvidas pode mandar.
Procure alguns tutoriais sobre o assunto.

Abs






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts