Listas Encadeadas [RESOLVIDO]

1. Listas Encadeadas [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 05/12/2007 - 15:59h

E aew galera free!!! Quanto tempo nao venho aqui...

Então... volto à ativa com uma pergunta.

Como faço para um elemento em uma lista encadeada apontar para 'n' elementos diferentes?

E eu não posso usar vetores, pois o vetor limitaria o numero maximo de elementos que podem ser apontados.. e isso não pode ocorrer para o que eu quero fazer... alguem ai sabe um jeito funcional de fazer isso?

Valeu galera



  


2. Re: Listas Encadeadas [RESOLVIDO]

cleiton
cleitonsb

(usa Ubuntu)

Enviado em 09/12/2007 - 16:01h

Acho que não entendi muito bem o que vc quer. Mas vamos tentar: Sou novo em programação, mas pelo que entendi, vc quer que um determinado "nó" tenha mais que uma informação??

Pq cada nó, na lista encadeada, aponta para o "proximo" e para o valor a ser armazenado. Na duplamente encadeada, aponta para o proximo, o anterior e para o valor a ser armazenado.

Vc quer que aponte para mais de um valor??


3. Re: Listas Encadeadas [RESOLVIDO]

Paulo Alberto Schimoller de Oliveira
paulloal

(usa Debian)

Enviado em 09/12/2007 - 17:19h

entao nao entendi muito bem sua duvida,
eu faço assin para mexer em lista encadeada
cria uma estrutura la vc coloca os campos de cada
nó.. cria um ponteido pra essa estrutura. e pronto
EX:
struck exemplo {
//aque vai os campos que tera no nó
int itCod;
//prox eu fis um campo pra apontar para outro nó
fload prox;
char nome[20]
};
struck exemplo *lista; //lista é o ponteiro da estrutura
espero ter ajudado..

[]'s paulloal


4. Re: Listas Encadeadas [RESOLVIDO]

ssssssssss
edirlf

(usa Ubuntu)

Enviado em 09/12/2007 - 17:46h

Amigo, em uma lista encadeada como conheço, um elemento aponta sempre para o seu próximo, ou, em uma lista duplamente encadeada ele aponta para seu anterior e para seu próximo.
O que vocês está querendo fazer (um elemento apontar para vários outros) creio que assemelha-se com uma árvore B (não necessariamente que o que você queira fazer seja exatamente uma).
Dê uma olhada nisso, talvez a idéia lhe ajude:

http://pt.wikipedia.org/wiki/%C3%81rvore_B

Outra coisa, talvez você possa usar "ponteiros para ponteiros" na sua estrutura, e ir inserindo neles os endereços dos outros nós, aumentando a quantidade dinamicamente, mas vai ser um pouco trabalhoso de implementar.


5. Re: Listas Encadeadas [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 10/12/2007 - 10:04h

@cleitonsb,
@paulloal
O que eu quero realmente eh que um nó aponte para vários....

@edirlf
Eu tambem tinha pensado em ponteiros pra ponteiros... mais como vc falo.... vai ser muito chato a implementação... mais.... vo tentar assim mesmo... queria saber se tinha outro jeito...

vlw galera...


6. Alocação dinâmica

Israel Miranda
israel_miranda

(usa FreeBSD)

Enviado em 10/12/2007 - 10:58h

Cara, acho que vai ser mais fácil se você usar alocação dinâmica mesmo...
C suporta alocação dinâmica de vetores, mas dá trabalho pra implementar. Mas eu lembro que tem jeito, meu professor me disse isso na aula de ATP.
Pesquisa sobre alocação dinâmica de vetores em C que você consegue.

Eu não lembro como faz isso, senão postava aqui pra você.


7. Re: Listas Encadeadas [RESOLVIDO]

ssssssssss
edirlf

(usa Ubuntu)

Enviado em 10/12/2007 - 14:03h

Pensei em uma coisa. Cria duas estruturas, uma lista normal e uma estrutura auxiliar parecida com uma árvore B. Na tua lista vc mantem os elementos, e nessa "árvore" tu mantem quem é ligado em quem.
Se puder, passe algum detalhe do que especificamente esteja implementando que talvez possamos lhe indicar alguma outra estrutura que seja melhor para o problema.


8. Qual a aplicação exatamente?

Marcelo Utikawa da Fonseca
utikawa

(usa Ubuntu)

Enviado em 19/12/2007 - 12:51h

O que você quer não é uma lista encadeada. Apontar para vários nós destrói com o conceito da lista encadeada!
Se um nós apontar para mais de um nó você não terá como fazer uma busca na lista, por exemplo. Isso acontece pois haverão vários caminhos a seguir.
Eu acredito que você quer uma espécie de relacionamento entre os itens relacionados, formando "árvores" de dados. É isso?
Se você explicar melhor o seu problema podemos propôr uma solução mais eficiente!


9. Seria isso?

Marcelo Utikawa da Fonseca
utikawa

(usa Ubuntu)

Enviado em 22/12/2007 - 01:48h

Hoje eu estava de bobeira aqui em casa então resolvi fazer um programa que eu acho que faz o que você quer!
Se quiser me peça por e-mail o código completo pois aqui é complicado de postar.

Código:

// Cria a lista
strList = ListCreate();

// Cria os nos
ListInsertNodeByValue(strList, "Filho");
ListInsertNodeByValue(strList, "Irmão");
ListInsertNodeByValue(strList, "Pai");
ListInsertNodeByValue(strList, "Mãe");
ListInsertNodeByValue(strList, "Avô Materno");
ListInsertNodeByValue(strList, "Avó Materna");
ListInsertNodeByValue(strList, "Avô Paterno");
ListInsertNodeByValue(strList, "Avó Paterna");

// Insere relacionamentos entre nos
ListLinkRelatedByValue(strList, "Filho", "Irmão");
ListLinkRelatedByValue(strList, "Filho", "Pai");
ListLinkRelatedByValue(strList, "Filho", "Mãe");
ListLinkRelatedByValue(strList, "Pai", "Avô Paterno");
ListLinkRelatedByValue(strList, "Pai", "Avó Paterna");
ListLinkRelatedByValue(strList, "Mãe", "Avô Materno");
ListLinkRelatedByValue(strList, "Mãe", "Avó Materna");

// Imprime a lista na tela
ListShowNodes(strList);

// Destroi a lista
ListDestroy(strList);

Saída do programa:

1: 'Filho'
Related: 'Irmão' 'Pai' 'Mãe'

2: 'Irmão'
Related:

3: 'Pai'
Related: 'Avô Paterno' 'Avó Paterna'

4: 'Mãe'
Related: 'Avô Materno' 'Avó Materna'

5: 'Avô Materno'
Related:

6: 'Avó Materna'
Related:

7: 'Avô Paterno'
Related:

8: 'Avó Paterna'
Related:



10. Solução

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 02/01/2009 - 23:21h

struct lista1
{
int info;
struct lista1 *prox;
struct lista1 *ante;
};

struct lista_principal
{
int info;
struct lista_principal *prox;
struct lista_principal *ante;

// a lista paralela
struct lista1 *inicio;
struct lista1 *fim;
};

// ponteiro global da lista primaria
struct lista_principal *prox;
struct lista_principal *ante;

Agora tudo o que tenho que fazer é ter duas funções de inserção ;)

struct lista1 *inserirPararela ( struct lista_principal *no, int info );
struct lista_principal *inserir ( int info );

Obrigado a todos que contribuiram,
- Slackware_10






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts