Jump to content

[Duvida] Criar várias listas


Strabush
 Share

Recommended Posts

Boas pessoal.

Estou com uma dúvida acerca de listas. Pretendo criar diversas listas que possuem os mesmos dados.

Sei que se tivessem dados diferentes teria de criar várias funções para adicionar elementos a lista, pois não possuem os mesmos dados (digo isto com base no meu conhecimento, pode haver outra solução).

Um bom programador é amigo da otimização, e como eu quero criar várias listas com dados iguais apenas com diferente valor, pretendo ter alguma função de adição genérica. Ouvi falar em vector de ponteiros, mas não percebi do que se trata. Alguém pode dar alguma luz?

Obrigado. Cumps.

Link to comment
Share on other sites

Podes ter um vector de ponteiros em que cada ponteiro aponta para o início da uma lista, ou cabeça.

Outra solução e talvez melhor, é criares uma lista ligada à parte em que em cada nó se encontra informação sobre cada lista, como os dados são iguais e suponho que a quantidade de dados também, podes ter, dentro de cada nó, um ponteiro para o início da lista e outro para o fim da mesma.

Esta última solução é ligeiramente mais dificil mas por vezes é agradável teres um ponteiro para o último nó da lista devido a não teres de percorrer toda a lista cada vez que queres aceder a ele.

A primeira solução é simples e fácil de implementar, sempre que crias uma lista incrementas uma variável de controlo e na posição (do vector de ponteiros) em que tiveres adicionas o endereço do início da lista a essa posição.

Concluindo, devido à fácil implementação, é melhor seguires o primeiro método que indiquei.

here since 2009

Link to comment
Share on other sites

Esqueci-me de te mostrar uma desvantagem em utilizares o tal vector: o espaço, tenta perceber porquê.

Quanto à declaração, criei aqui um pequeno exemplo para te ajudar:

#include <stdio.h>

#define MAX 5

int main(void) {
  int *pt[5],vector[]={1,2,3,4,5},k=0;
  for(k=0; k < MAX; k++) pt[k]=&vector[k];
  for(k=0; k < MAX; k++) printf("%i\n", *pt[k]);
  return 0;
}

here since 2009

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.