A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Estrutura de Dados Aula 3 - Listas

Apresentações semelhantes


Apresentação em tema: "Estrutura de Dados Aula 3 - Listas"— Transcrição da apresentação:

1 Estrutura de Dados Aula 3 - Listas
Professor Luiz José Hoffmann Filho

2 Introdução Um das formas mais usadas para se manter dados agrupados é a lista Lista de compras, itens de estoque, notas de alunos, informações de funcionários, etc. Lista Linear agrupa informações referentes a um conjunto de elementos que, de alguma forma, se relacionam entre si

3 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. Se n= 0, a lista L é vazia. 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

4 Operação sobre uma lista
Operações comuns Pesquisa, inserção, alteração e remoção de um determinado elemento da lista Outras operações: Determinação do número total de elementos da lista; Ordenamento da lista; União de duas ou mais listas; Particionamento de lista e sub-listas; Etc…

5 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)

6 Tipos especiais de listas
Fila Dupla: lista linear onde as inserções e remoções podem ser feitas em qualquer extermo. Fila Dupla de Entrada Restrita (FDER): inserção restrita a um único extermo. Fila Dupla de Saída Restrita (FDSR): remoção restrita a um único extremo.

7 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 Sequencial - Dinâmica Dinâmica Encadeada

8 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.

9 Alocação Sequencial Sequencial: elementos da lista são colocados em posições de memória consecutivas Pontos fortes: Fácil endereçamento Aritmética simples (endereços) Fácil inserção e sepressão de elementos no final da lista Pontos fracos: Dificíl inserção e supressão de elementos no meio da lista Dificíl movimentação de elementos na lista

10 Alocação Encadeada Lista sequenciais são estrutura de fácil acesso
No entanto, o acesso a memória não é ótimo Listas muito pequenas sofrem de problemas de re-alocação Listas muito grandes alocam memória desnecessarimante Listas encadeadas fornecem uma maneira de otimizar a alocação de memória Para cada novo elemento é alocado um espaço em memória

11 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: A informação Um endereço para o próximo elemento da lista A lista é representada como um endereço para o primeiro nó A partir deste nó podemos acessar os demais LAX CWB NWY

12 Lista Estática Sequencial
Implementada usando um vetor Quantidade Máxima de nós determinada Memória alocada em tempo de compilação 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 100 Struct node { int info, next; } struct node Node[MAX];

13 Listas simplesmente Encadeadas
Ou Dinâmica Encadeada Implementação usando Objetos (Java, Python) ou Ponteiros (C/C++) Os espaços de memória para os nós são alocados dinamicamente, à medida que os novos nós são inseridos na lista E liberados à medida que os nós são excluídos

14 Lista Simplesmente Encadeadas
Uma LSE pode ser descrita como sendo um conjunto dinâmico de nós Composta por uma estrutura de nós previamente definida Info 1 Info 2 Info 3 Nós da Lista Primeiro

15 Lista Encadeadas - Exemplo
19 12 3 Primeiro

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

17 Criação da Lista Primeiro NULL

18 Criação da lista Uma outra abordagem é utilizar 2 endereçamentos
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

19 Inserção na lista Existem diversos tipos de inserção que podem ser feitas em uma lista Diferentemente das pilhas e filas, os elementos podem ser inseridos em qualquer lugar da lista Exemplos: Inserção no início Inserção em uma posição n da lista Inserção no final da lista Inserção ordenada na lista

20 Inserção no início Inserindo o elemento 10 Inserindo o elemento 20
Primeiro NULL

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

22 Inserção no início – Caso Geral
LISTA Primeiro el1 …. eln newEl

23 Exercícios Implementar uma lista em C, com funções para:
Criar uma lista Inserir um elemento no início da lista Inserir um elemento no fim da lista Imprimir os elementos da lista na tela Verificar se a lista é vazia Buscar um elemento qualquer na lista Retirar um elemento qualquer da lista Liberar a memória da lista

24 Lista Duplamente Encadeadas

25 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ção Permite o deslocameno em ambas as direções 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

26 Lista Simplesmente Encadeadas
Primeiro 19 12 3

27 Lista Duplamente Encadeadas - Exemplo
Primeiro 19 12 3

28 Sentinelas da cabeça e da cauda
Cabeçalho (header), antes do início da lista e final (trailer) após a cauda da lista Não armazenam nenhum elemento Header: referência next válida e prev nula 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)

29 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

30 Exercícios Implementar uma lista duplamente encadeada, com funções para: Criar uma lista Inserir um elemento no início da lista Inserir um elemento no fim da lista Imprimir os elementos da lista na tela Verificar se a lista á vazia Buscar um elemento qualquer na lista Retirar um elemento qualquer da lista

31 Listas Encadeadas Circulares

32 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ó Não existe nó inicial nem final 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.

33 Lista Encadeadas Circular - Exemplo
Cursor 19 12 3

34 Exercícios Escreva uma função que copie um vetor para um lista encadeada. Escreva uma função que copie uma lista encadeada para um vetor. Escreva uma função que faça uma cópia de uma lista dada. Escreva uma função que concatena duas listas encadeadas(isto é. “amarra” a segunda no final da primeira). Escrever uma função que conta o número de nos de uma lista encadeada. Faça todos os exercícios anteriores utilizando uma lista duplamente encadeada.


Carregar ppt "Estrutura de Dados Aula 3 - Listas"

Apresentações semelhantes


Anúncios Google