Você está na página 1de 28

Fundamentos de Programação III

Linguagem Java

Pedro Mbote
Listas ligadas

❑ As listas ligadas (ou encadeadas) são utilizadas


para evitar que operações de inserção e
remoção dos elementos tenham custo linear, isto
é, para evitar a necessidade de deslocamentos
de partes inteiras da lista.
Listas ligadas

❑ São conjuntos de elementos que podem estar


dispersos na memória, uma vez que cada elemento
aponta para o seu sucessor.
Listas ligadas

❑ Cada elemento da lista é composto por campo adicional


(ponteiro / referência) que contém o endereço do seu sucessor.

❑ O ponteiro / referência da última estrutura aponta para NULO


indicando o fim da lista ligada.
Listas ligadas

❑ Para efectuarmos operações em listas ligadas, é necessário saber onde


o primeiro elemento da lista se encontra, Pois é a partir dele que
podemos encontrar os outros elementos.

❑ Como os elementos não estão dispostos de maneira sequencial,


utilizamos o ponteiro ou referencia de cada elemento para saber onde
está o próximo.
Operações
Operações

I. Inicialmente a cabeça da lista aponta para


null, indicando que a mesma está vazia (1).

II. Após a inserção do um Item 1 na lista, a


cabeça aponta para ele, e o apontador para o
próximo Item contido no Item 1 aponta para
null, já que após ele não há outros itens (2).

III. Caso um outro elemento (Item 2) seja


inserido, ele passa a ser a cabeça da lista e
seu apontador para o próximo elemento da lista
aponta para a antiga cabeça da lista (Item 1),
como pode ser verificado em (3).
Operações
Operações
Operações

I. Se a chave do item passado for menor do


que a do primeiro da lista, será inserido no
início e tornar-se-á a cabeça da lista
(situação 1).

II. Caso contrário, será inserido no meio ou


no final da lista, dependendo do valor de sua
chave e dos elementos contidos na lista.
Operações

I. Quando o item a ser removido encontra-se na cabeça da


lista, devemos executar o seguinte passo:

1) actualizar a cabeça pelo próximo do primeiro


elemento.
Listas ligadas - operações

I. Quando o item a ser removido não se encontra na cabeça da


lista, é necessário actualizar o apontador do item anterior. Sendo
assim, usamos um apontador (PActual) para procurar o Item a ser
removido e outro (PAnterior) para guardar o Item anterior na lista
encadeada.

II. Desta forma, ao encontrar o Item (2), temos um apontador para o


item anterior a ele (PAnterior) e para o próprio item (PActual)

III. De posse destes apontadores, O PAnterior passa apontar para o


próximo do PActual

IV. Ao final, temos uma lista encadeada com um item a menos e com
todos os apontadores ajustados.
Dúvidas
Listas ligadas
Dúvidas
Implementação

❖ Cada elemento da lista é uma

classe que encapsula:

▪ Duas variáveis – uma que guarda os

dados do elemento e outra que aponta o


próximo elemento; Construtores;
Assessores para as variáveis do elemento
Implementação

❖ A lista ligada é uma classe que encapsula:

▪ Duas variáveis que guardam o primeiro e o último elemento;

▪ Construtor

▪ Um método verificar se a lista está vazia;

▪ Métodos para inserir elementos à cauda, à cabeça e a uma posição


Implementação
Implementação

Inserir a cauda

1 - Criar novo elemento;

2 - Se a lista estiver vazia


2.1 - O novo elemento passa a ser o primeiro e o
último elementos da lista;

3 - Se a lista não estiver vazia


3.1 - o último elemento corrente passa a apontar
para o elemento que criámos;

3.2 - o elemento que criámos passa a ser o último


elemento da lista;
Implementação

Inserir a cabeça

1 - Criar novo elemento;

2 - Se a lista estiver vazia


2.1 - O novo elemento passa a ser o primeiro
e o último elementos da lista;

3 - Se a lista não estiver vazia


3.1 - o novo elemento passa a ser o primeiro
elemento da lista e aponta para o próximo actual;
Implementação
Inserir o elemento na posição k

1 - se a lista tiver menos de k elementos, actualizar K


para a seguir ao fim da lista;
2 - criar um novo elemento
3 - se a lista estiver vazia
3.1 - o novo elemento passa a ser o primeiro e o
último elemento da lista;
4 - se a lista não estiver vazia
4.1 - Se k for zero, inserir o novo elemento à cabeça;
4.2 - percorrer a lista desde o primeiro e elemento até
ao elemento k-1;
4.3 - Inserir o novo elemento
4.3.1 - apontar o novo elemento para o que sucede ao
elemento corrente;
4.3.2 - apontar o elemento corrente para o novo
elemento;
Implementação

Remover a cabeça

1 - Se a lista estiver vazia, imprimir a mensagem


apropriada;

2 - Se a lista não estiver vazia


2.1 - O elementos a eliminar é o primeiro da lista;

2.2 - se o primeiro e último elementos actuais


são iguais, a lista fica vazia;

2.3 - caso contrário, o primeiro elemento passa a


ser o sucessor do primeiro elemento actual
Implementação

Remover a cauda

1 - Se a lista estiver vazia, imprimir a mensagem


apropriada;

2 - Se a lista não estiver vazia


2.1 - O elementos a eliminar é o primeiro da lista;

2.2 - se o primeiro e último elementos actuais


são iguais, a lista fica vazia;

2.3 - caso contrário, o primeiro elemento passa a


ser o sucessor do primeiro elemento actual
Implementação
Remover posição k

1 - Se a lista estiver vazia, imprimir a mensagem


apropriada;

2 - Se a lista não estiver vazia


2.1 - se o primeiro elemento contiver o nome a
eliminar, remover o primeiro elemento;

2.2 - caso contrário, procurar o nome, tornando


corrente o primeiro elemento e avançando para
os seus sucessor;

2.2 - se encontrarmos o nome a eliminar, fazer


com que o elemento que antecede o concorrente
aponte para o elemento que sucede ao
concorrente;
Implementação

Testar a nossa lista

1 – Criar um objecto lista;

2 – Adicionar elementos a lista;

3 – Imprimir a lista;

4 – Total de elementos

5 – Remover a lista;
Dúvidas
Atenção
Referências Bibliográficas

❖Cormen T. M., Leiserson C. E., Rivest R. L.;- Introduction to algoritms, 3th Edition, MIT press,
Cambrige, Massachusetts, 2009.

❖Sedgewick R.;-Algorithms in Java, Parts 1-4: Fundamentals, Data Structures, Sorting,


Searching, 3rd Edition, Addison-Wesley Professional, 2002.

❖Weiss M. A.; - Data Structures and Algorithm analysis in Java, 2th Edition, Addison Wesley,
2007.

❖Goodrich M., Tamassia R.;- Data Structures and Algorithms in Java, 4th Edition, John Wiley &
sons, 2006.

Você também pode gostar