Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho [email protected].

34
Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho [email protected]

Transcript of Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho [email protected].

Page 1: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Estrutura de Dados

Aula 3 - ListasProfessor Luiz José Hoffmann Filho

[email protected]

Page 2: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Introdução• Um das formas mais usadas para se manter

dados agrupados é a listao Lista de compras, itens de estoque, notas de alunos, informações de

funcionários, etc.o Lista Linear agrupa informações referentes a um conjunto de

elementos que, de alguma forma, se relacionam entre si

Page 3: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Definição de uma lista• É uma coleção L:{a1, a2, …, an} , n >= 0, cuja

propriedade estrutural baseia-se apenas na posição relativa dos elementos, que são dispostos linearmente.o Se n= 0, a lista L é vazia.o Caso contrário:

• a1 é o primeiro elemento de L;• an é o último elemento de L;• Ak, 1<k<n, é precedido pelo elemento ak-1 e segundo por ak+1 em L

Page 4: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Operação sobre uma lista

• Operações comunso Pesquisa, inserção, alteração e remoção de um determinado elemento

da lista• Outras operações:

o Determinação do número total de elementos da lista;o Ordenamento da lista;o União de duas ou mais listas;o Particionamento de lista e sub-listas;o Etc…

Page 5: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Tipos especiais de listas

• Pilha: lista linear onde todas as inserções e remoções são realizadas em um único extremo da lista. Conhecidas também como listas LIFO (last-in/First-out)

• Fila: lista linear onde todas as inserções são realizadas num determinado extremo da lista e as remoções, no outro extremo. Conhecidas também como FIFO (First-In/First-Out)

Page 6: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Tipos especiais de listas

• Fila Dupla: lista linear onde as inserções e remoções podem ser feitas em qualquer extermo.o Fila Dupla de Entrada Restrita (FDER): inserção restrita a um único

extermo.o Fila Dupla de Saída Restrita (FDSR): remoção restrita a um único

extremo.

Page 7: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Implementações das listas

• Quanto a alocação de memória, a implementação de listas lineares pode ser:

Sequencial

Encadeada

Estática Estática Sequencia

l

-

Dinâmica - Dinâmica Encadead

a

Page 8: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Alocação Estática e Dinâmica

• Estática: quantidade total de memória utilizada pelos dados de um programa é previamente conhecida e definida de modo imutável. Durante toda a execução a quantidade de memória utilizada não varia.

• Dinâmica: durante a execução, a quantidade de memória utilizada pelos dados do programa é variável.

Page 9: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Alocação Sequencial• Sequencial: elementos da lista são colocados em

posições de memória consecutivas• Pontos fortes:

o Fácil endereçamentoo Aritmética simples (endereços)o Fácil inserção e sepressão de elementos no final da lista

• Pontos fracos:o Dificíl inserção e supressão de elementos no meio da listao Dificíl movimentação de elementos na lista

Page 10: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Alocação Encadeada• Lista sequenciais são estrutura de fácil acesso

o No entanto, o acesso a memória não é ótimoo Listas muito pequenas sofrem de problemas de re-alocaçãoo Listas muito grandes alocam memória desnecessarimante

• Listas encadeadas fornecem uma maneira de otimizar a alocação de memóriao Para cada novo elemento é alocado um espaço em memória

Page 11: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Nós de uma lista• Cada elemento da lista é chamado de um nó da

lista• Um nó é representado por uma estrutura de

contém 2 campos:o A informaçãoo Um endereço para o próximo elemento da lista

• A lista é representada como um endereço para o primeiro nóo A partir deste nó podemos acessar os demais

LAX CWB NWY

Page 12: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Lista Estática Sequencial

• Implementada usando um vetoro Quantidade Máxima de nós determinadao Memória alocada em tempo de compilaçãoo Entretanto, os nós podem, ou não, ser ordenados pelos índices do

vetor• Cada um dos nós podem conter em si próprio um ponteiro para o

próximo elemento, ex:Em C:#define MAX 100Struct node {

int info, next;}struct node Node[MAX];

Page 13: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Listas simplesmente Encadeadas

• Ou Dinâmica Encadeadao Implementação usando Objetos (Java, Python) ou Ponteiros (C/C++)o Os espaços de memória para os nós são alocados dinamicamente, à

medida que os novos nós são inseridos na listao E liberados à medida que os nós são excluídos

Page 14: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Lista Simplesmente Encadeadas

• Uma LSE pode ser descrita como sendo um conjunto dinâmico de nóso Composta por uma estrutura de nós previamente definida

Info 1 Info 2 Info 3

Primeiro Nós da Lista

Page 15: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Lista Encadeadas - Exemplo

19 12 3

Primeiro

Page 16: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Operações em listas• Criação• Inserção• Exclusão• Busca• Verificação de lista vazia• Liberação de memória

Page 17: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Criação da Lista

NULL

Primeiro

Page 18: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Criação da lista• Uma outra abordagem é utilizar 2

endereçamentoso Um para o início e outro para o fim da lista

• O endereço para o fim da lista permite realizar inserções sem que seja necessário percorrer toda a lista

• Inicialmente, como a lista está vazia, ambos apontam para NULL

Page 19: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Inserção na lista• Existem diversos tipos de inserção que podem ser

feitas em uma listao Diferentemente das pilhas e filas, os elementos podem ser inseridos

em qualquer lugar da lista• Exemplos:

o Inserção no inícioo Inserção em uma posição n da listao Inserção no final da listao Inserção ordenada na lista

Page 20: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Inserção no início

• Inserindo o elemento 10• Inserindo o elemento 20• Inserindo o elemento 30

NULL

Primeiro

Page 21: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Inserção no início – Inserido o elemento 10

Primeiro

10 NULL

Page 22: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Inserção no início – Caso Geral

Primeiro

el1 eln….

newEl

LISTA

Page 23: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exercícios• Implementar uma lista em C, com funções para:

o Criar uma listao Inserir um elemento no início da listao Inserir um elemento no fim da listao Imprimir os elementos da lista na telao Verificar se a lista é vaziao Buscar um elemento qualquer na listao Retirar um elemento qualquer da listao Liberar a memória da lista

Page 24: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Lista Duplamente Encadeadas

Page 25: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Listas duplamente encadeadas (LDE)

• Listas encadeadas são fácies de serem navegadas do início para o fim

• No entanto, é difícil navegar do final para o início da lista

• As listas duplamente encadeadas facilitam tal navegaçãoo Permite o deslocameno em ambas as direçõeso Um nó em uma LDE armazena duas referências

• Next, que aponta para o próximo nó da lista• Prev, que aponta para o nó anterior

Page 26: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Lista Simplesmente Encadeadas

19 12 3

Primeiro

Page 27: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Lista Duplamente Encadeadas - Exemplo

19 12 3

Primeiro

Page 28: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Sentinelas da cabeça e da cauda

• Cabeçalho (header), antes do início da lista e final (trailer) após a cauda da listao Não armazenam nenhum elementoo Header: referência next válida e prev nulao Trailer: referência next nula e prev válida

• O objetivo LDE deverá apenas armazenar referências para estas duas sentinelas e um contador (size) para a quantidade de elementos (sem contar os sentinelas)

Page 29: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Operações sobre lista duplamente encadeada• Remoção de um nodo na extermindade de uma

LDE• Inserção no início de uma LDE• Inserção no meio de uma LDE• Remoção do meio de uma LDE

Page 30: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exercícios• Implementar uma lista duplamente encadeada,

com funções para:o Criar uma listao Inserir um elemento no início da listao Inserir um elemento no fim da listao Imprimir os elementos da lista na telao Verificar se a lista á vaziao Buscar um elemento qualquer na listao Retirar um elemento qualquer da lista

Page 31: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Listas Encadeadas Circulares

Page 32: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Listas Encadeadas Circulares (LEC)

• Possui o mesmo tipo de nós de uma LES• Não existe cabeça nem cauda, o último nó

aponta para o primeiro nóo Não existe nó inicial nem finalo Por isso precisamos de um CURSOR

• Server de ponto de partida (Sabemos quando uma volta foi completa)

• Se a estrutura não for ordenada, o elemento deverá ser inserido sempre no primeiro lugar.

• Ao remover um elemento, deve-se estar atento para o caso de a lista ter somente um único elemento, pois a estrutura torna-se-á vazia.

Page 33: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Lista Encadeadas Circular - Exemplo

19 12 3

Cursor

Page 34: Estrutura de Dados Aula 3 - Listas Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exercícios1. Escreva uma função que copie um vetor para um

lista encadeada.2. Escreva uma função que copie uma lista

encadeada para um vetor.3. Escreva uma função que faça uma cópia de uma

lista dada.4. Escreva uma função que concatena duas listas

encadeadas(isto é. “amarra” a segunda no final da primeira).

5. Escrever uma função que conta o número de nos de uma lista encadeada.

6. Faça todos os exercícios anteriores utilizando uma lista duplamente encadeada.