Listas encadeadas

Gostaria de saber se alguem teria alguma coisa relacionada ao assunto,que explicasse passo a passo como funciona este processo,e um exemplo se possivel.

Obrigado.Paulo

Cara,
lista encadeada é uma estrutura de dados (TAD), onde vc define a estrutura e a ligação entre uma “celula”(Objeto instanciado pela estrutura) e outra é feita atravéz de um apontador(Ponteiro), que é uma variavel aonde se armazena o endereçõ de memoria para a proxima estrutura!
Vou ficar de devendo o material, pois estudei isso a 4 anos atraz quando entrei para a faculdade! Só tenho o materia impresso! As linguagens de programação aonde as listas são mais comumente utilizadas são Pascal e C++!!!
Flow!!

De uma olhadinha aqui. Qualquer coisa me avise.

http://www.portaljava.com.br/home/modules.php?name=Forums&file=viewtopic&p=77624&sid=f990402e4f5fdffcbe88a7d5a72f801f#77624

Abraço,
Fábio Heleno

Primeiro criamos o registro para armazenar os dados da lista:

REG_LIST:REGISTRO LETRA:CHAR PROXIMO:INTEIRO FIM_REGISTRO
Depois declaramos a lista propriamente dita:

LISTA:MATRIZ[N]DE REG_LISTA

Atravessamento:

INICIO ARGUMENTOS LISTA:MATRIZ[N] DE REG_LISTA N:INTEIRO DESCRITOR:INTEIRO VARIÁVEIS REG_LISTA:REGISTRO LETRA:CHAR PROXIMO:INTEIRO FIM_REGISTRO CONT:INTEIRO PROCEDA ATRAVESSAMENTO_ENCADEADA SE DESCRITOR = NULO MOSTRE("LISTA VAZIA!!!") SENÃO CONT:=DESCRITOR ENQUANTO CONT <> NULO MOSTRE(LISTA[CONT].LETRA) CONT:= LISTA[CONT].PROXIMO FIM_ENQUANTO FIM-SE FIM

Veja se consegui entender, pois esse é o menor módulo, se entender lhe passo o restante.

Abraço,
Fábio Heleno

Cara,
só completando tudo que foi dito!!! A ideia da Lista encadeada é vc ter uma especie de vetor que crece dinamicamente!! Vc não define o numero de posições que ele tem, a medida que vc precisa de um novo objeto na memoria ele vai alocando e usando! Ao contrario dos vetores que vc define um tamanho e utiliza somente esse tamanho!
No java temos a classe Vector que simula esse tipo de lista! Aonde a cada elemento que vc coloca na memoria ele vai crescendo de acordo com seus elementos! Esse é a utilidade da Lista encadeada: Ser um vetor de estruturas dinamico e não estatico como um vetor comun!

[quote=“AndersonAugusto”]Cara,
só completando tudo que foi dito!!! A ideia da Lista encadeada é vc ter uma especie de vetor que crece dinamicamente!! Vc não define o numero de posições que ele tem, a medida que vc precisa de um novo objeto na memoria ele vai alocando e usando! Ao contrario dos vetores que vc define um tamanho e utiliza somente esse tamanho!
No java temos a classe Vector que simula esse tipo de lista! Aonde a cada elemento que vc coloca na memoria ele vai crescendo de acordo com seus elementos! Esse é a utilidade da Lista encadeada: Ser um vetor de estruturas dinamico e não estatico como um vetor comun![/quote]

Eu discordo disso.
Nos vetores, a próxima posição é calculada somando-se o tamanho do tipo de dados do vetor (1 byte, por exemplo) à posição de memória atual. E o inverso para o elemento anterior. Numa lista, cada posição tem um ponteiro ou referência para a próxima posição (talvez anterior também, depende da lista).

Ou seja, num vetor de bytes de 20 posições, se a primeira posição ocupasse a posição 0010 da memória, a última ocuparia 0030.
Não há uma referência entre as posições.
Numa lista, as posições da lista podem estar (e certamente estão) em posições de memória completamente isoladas, como 0015 e 4321.

Nem Vector nem ArrayList simulam lista encadeada. A única collection que sei que faz isso é LinkedList (e é duplamente encadeada).
Mas você pode criar uma lista usando classe auto-referenciais, onde a classe tem como atributo um objeto da própria classe.

Me avisem se compliquei ou falei alguma besteira :slight_smile:


Ahh sim, eu me referi a lista dinâmica. O exemplo parece lista estática.

Não cara!!
Eu tava falando que se vc define um vetor de 5 posições vc conseguira colocar 5 elementos nele, em uma lista encadeada vc nao define as 5 posições a medida que vc vai usando ele vai alocando as posições, podendo chegar a ate quando a memoria aguentar!
Entendeu?

Tudo bem, mas é que você disse que um Vector simula lista encadeada, sendo que no Vector você tem que dizer quantas posições quer, apesar dele pode crescer além disso.

É que o Vector cresce de tanto em tando!
Na verdade ele nao representa bem uma lista encadeada mesmo! Mas ele crece sozinho!
É !!!
A ideia é essa mesmo!!!
Trocar ideias para fixar conceitos!!!
Valew!!!

Ok! :grin:

hehehe… boa essa de vocês dois! :razz:

Sugestões:

  • Você usa realmente LinkedList para implementar, dará certo da mesma forma, pois já fiz com base nele, e é de facil implementação, apesar de que se for para entendimento acho mais adequado o outro modo;

  • Contrói toda uma estrutura de Lista Encadeada na unha, desta maneira você toma conhecimento pleno sobre a funcionalidade, sentido do processos e resultado de uma lista deste tipo. O único porém é quanto sua implementação, que é um pouco trabalhosa, como pode-se ver um exemplo que passei anteriormente, o Algoritmo de Registro e de Atravessamento, que já passam a idéia de como é.

Abraço,
Fábio Heleno

Pessoal,
Na minha opinião, o que a lista encadeada tem como vantagem em relação ao vetor não é o fato de não ser estático, como já foi dito pode se trabalhar com vetores sem ter a lista estática (também podemos realocar o vetor), mas sim quando queremos inserir/remover elementos do meio da lista. No caso dos vetores, para estas operações, seria necessário reposicionar todos os elementos seguintes à posição no vetor o que aumentaria, gigantescamente, o processamento. É isso!
Valews

[quote=“Victor1982”]Pessoal,
Na minha opinião, o que a lista encadeada tem como vantagem em relação ao vetor não é o fato de não ser estático, como já foi dito pode se trabalhar com vetores sem ter a lista estática (também podemos realocar o vetor), mas sim quando queremos inserir/remover elementos do meio da lista. No caso dos vetores, para estas operações, seria necessário reposicionar todos os elementos seguintes à posição no vetor o que aumentaria, gigantescamente, o processamento. É isso!
Valews[/quote]

Pois é, o Vector faz todo esse reposicionamento (LinkedList não).

Acho que devia fazer como o FaHeCoN sugeriu: criar você mesmo a lista. É bem fácil, usando classes auto-referenciais: uma classe tem como atributo um objeto da própria classe.

Exemplo:

class Nodo { Nodo proximo; ... }