Array
(
)

Como criar uma lista dinamica ?!

Luiz_aquino
   - 13 nov 2004

é qeu gostaria de fazer uma lista dinamica com inicio final, prox a nterior mas já aprendi q o c tem um componente tlist q faz tudo isso, valeu pela atenção!!!!


:arrow: Título alterado pelo Moderador oTTo. Removido: ´Lista´.
:idea: Seja mais claro no título.
:idea: [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=16976]Saiba como obter resposta rápida..[/url]
:idea: Leia sempre [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta.[/url]
:idea: Use sempre o Link [url=http://delphiforum.icft.com.br/forum/search.php][img:a60fd0de61]http://delphiforum.icft.com.br/forum/templates/subSilver/images/icon_mini_search.gif[/img:a60fd0de61] Pesquisar[/url] no topo da Página.


Raimundo_farias
   - 24 nov 2004

Blz.... Mais depois tenta ai....

#Código

typedef struct no {
int info;
struct no *prox;
struct no *ant;
}noLista;

typedef struct cabeca {
noLista inicio;
noLista fim;
}descritor;

//aloca o inicio da lista.
descritor *iniLista = (descritor *) malloc(sizeof(descritor));

void isereLista(int elem, descritor *minhaLista)
{
noLista *ant = NULL, *suc;
//aloca um novo endereço para a informação
noLista *novo = (noLista *) malloc(sizeof(noLista));
if(novo != NULL) {
novo->prox = NULL;
novo->ant = NULL;
novo->info = elem;
if(minhaLista->inicio == NULL){// testa se a lista está vazia
minhaLista->inicio = novo;
minhaLista->fim = novo;
}else {
suc = minhaLista->inicio;
//procura o local de inserção
while((suc != NULL) && (suc->info < elem)) {
ant = suc;
suc -> suc->prox;
}
if(ant == NULL){ //insere no inicio da lista
novo->prox = minhaLista->inicio;
minhaLista->inicio->ant = novo;
minhaLista->inicio = novo; // atualiza o inicio da lista
}
else
if((suc != NULL) && (suc->info > elem)){ //insere no meio
novo->prox = ant->prox;
novo->ant = ant;
suc->ant = novo;
ant->prox = novo;
}
else
if(suc == NULL){ //insere no final
novo->ant = minhaLista->fim;
minhaLista->fim->prox = novo;
minhaLista->fim = novo; //atualiza o final da lista.
}

}
}

}

//(...)

insereLista(36, iniLista); //depois é só chamar.


não sei se tem algum erro, escrevi agora.
Depois testa ai... é sempre bom a a gente saber como isso funciona... vai que vc ñ pode usar o BCB.... eu sempre faço assim
Qualquer coisa é só postar!