Ir ao conteúdo
  • Cadastre-se
Keader

Passar Lista encadeada por Referencia

Recommended Posts

Como faço para passar uma lista encadeada por referencia para um procedimento (função void), para que não necessite de retorno , que as alterações feitas na função se aplique para a lista no restante do programa...

Mas para isso necessito não utilizar variáveis globais.

Por favor necessito saber como faz a chamada e o recebimento na função :lol:

Aguardo respostas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a lista encadeada é um conjunto de Nós, você não passa a lista passa um nó, um nó possui a referência para o próximo nó.

você vai precisar de um Struct: veja como criar um struct que contenha um atributo do tipo ponteiro, e o valor do nó em si. Dicas: use * para criar o ponteiro e & para acessar o Nó, use Type def para definir o struct como um tipo.

para passar o nó você pode fazer assim:


void imprimeLista(TipoDoSeuStructNo primeiroNo ){

TipoDoSeuStructNo referencia = &primeiroNo

while (TipoDoSeuStructNo noatual = referencia->proximono){
faça alguma coisa...
}

}

não posso te explicar tudo, você tem que ir buscando e tentando fazer, senão nao vai aprender.

abs;.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que é a Lista encadeada , e como funciona eu sei

Necessitava apenas de como passa-la por referencia , no caso passar a 1ª posição da lista, assim teria acesso ao resto.

No caso apenas a chamada e recebimento

Pelo que li ,na função que vai "receber" o parametro, ela deve estar como ponteiro de ponteiro (**), só que não compreendi muito bem sobre ponteiro de ponteiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Keader,

Pelo que li ,na função que vai "receber" o parametro, ela deve estar como ponteiro de ponteiro (**), só que não compreendi muito bem sobre ponteiro de ponteiro.

Exato, o protótipo da função terá esse formato, vai dispor de um ponteiro para ponteiro.

E, de fato, no caso da lista, se você precisar atualizar o ponteiro para a lista, ou você retorna o ponteiro no retorno da função (de manutenção da lista), ou atualiza o ponteiro dentro da função. Exemplo (sem checagens de consistência) para excluir o primeiro nó:

void excluiPrimNo(Lista **ptLista)
{
Lista *head, *p;

p = *ptLista;
head = p->prox;
[B]*ptLista = head;[/B] /* Aqui, o ponteiro (pInicioLista) passado e atualizado */
free(p);

}

Na main(), eu chamaria essa função passando o endereço do ponteiro:

excluiPrimNo(&pInicioLista);

Se não fosse dessa forma, eu retornaria o ponteiro atualizado através da função. Ex:

Lista* excluiPrimNo(Lista *ptLista)
{
Lista *head, *p;

p = ptLista;
head = p->prox;
// ptLista = head;
free(p);
return (head);

}

Na main(), você teria algo como:

pInicioLista = excluiPrimNo(pInicioLista);

No tópico abaixo tem um exemplo disso:

http://forum.clubedohardware.com.br/nao-acho-erro/1122721?t=1122721

E outra, não existe passagem por referência em C. Apenas em C++. Em C, você tem ponteiro para ponteiro, que é o exemplo dado acima.

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema de fazer uma função , é que eu necessitava "retornar" 2 listas, ai tem que ser por procedimento de ponteiro de ponteiro mesmo

De qualquer modo consegui resolver o problema , obrigadão pela ajuda ai , iluminou a mente aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kaeder, por gentileza, qual foi a solução encontrada?

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





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×