Ir ao conteúdo
  • Cadastre-se

Passar Lista encadeada por Referencia


Keader

Posts recomendados

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.

Link para o comentário
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;.

Link para o comentário
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.

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!