55
E STRUTURA DE D ADOS Prof. Dr. Daniel Caetano 2014 - 2 LISTAS LINEARES ENCADEADAS

ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

ESTRUTURA DE DADOS

Prof. Dr. Daniel Caetano

2014 - 2

LISTAS LINEARES ENCADEADAS

Page 2: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Objetivos

• Conceituar Listas Lineares Encadeadas

• Compreender a alocação dinâmica e memória

• Representar Listas Simplesmente Encadeadas

• Implementar operações com as listas simplesmente encadeadas

• Atividade Estruturada!

Page 3: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Material de Estudo

Material Acesso ao Material

Apresentação http://www.caetano.eng.br/ (Aula 12)

Material Didático Estruturas de Dados (Parte 1) – Páginas 88 a 98

Online C Completo e Total – Páginas 540 a 550

Page 4: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

RECORDANDO...

Page 5: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Recordando...

• Vimos...

– Listas Contíguas

• Problema:

– Reservar espaço na memória

– Conhecer tamanho máximo da lista

• Precisa ser desse jeito?

• Vamos ver um jeito diferente?

Page 6: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

MOMENTO LÚDICO: ENTENDENDO UMA LISTA

ENCADEADA

Page 7: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

DISCUSSÃO SOBRE A DINÂMICA

Page 8: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Discussão sobre Listas Encadeadas

• Os itens estavam contíguos ou espalhados?

• É possível saber até onde esta lista pode crescer?

• Seria fácil acrescentar outro objeto na sequência?

– Se for necessário mais um papel, o que haveria nesse papel?

– Será necessário mudar alguma coisa nos outros papéis?

Page 9: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Discussão sobre Listas Encadeadas

• Lista Encadeada: lista de elementos interligados, como em uma corrente

– O primeiro elemento aponta para o segundo

– O segundo aponta para o terceiro

– O terceiro aponta para o quarto

– ...

1

2

3

4

Page 10: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Discussão sobre Listas Encadeadas

• Lista Encadeada: lista de elementos interligados, como em uma corrente

• Para acrescentar outro elemento no fim?

• Criar o novo elemento

• Associá-lo à lista (encadeá-lo)

1

2

3 5

4

Page 11: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Discussão sobre Listas Encadeadas

• Lista Encadeada: lista de elementos interligados, como em uma corrente

• Para acrescentar outro elemento no fim?

• Criar o novo elemento

• Associá-lo à lista (encadeá-lo)

1

2

3 5

4

Como criar novos

elementos?

Já vimos isso?

Page 12: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

RECORDANDO:

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Page 13: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Alocação Dinâmica de Memória

• Alocar memória estaticamente: declarar

– int, float, char etc.

• Alocação dinâmica?

– Reservar no momento necessário

– Liberar quando não for mais necessário

• Reservar: new

• Liberar: delete

Page 14: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Alocação Dinâmica de Memória

• Modo de Usar: new e delete

int *p;

p = new int;

*p = 10;

cout << p << endl;

cout << *p << endl;

delete p;

• Acompanhe os exemplos

Page 15: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

REPRESENTANDO LISTAS ENCADEADAS

Page 16: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Representando Listas Encadeadas • Como vimos na dinâmica:

– Lista encadeada é composta por nós

• Um nó tem a função de...

– Guardar um elemento da lista

• Que outra informação tem o nó?

– Um ponteiro que indique o próximo nó

• E quando não há um próximo nó?

– Ajustamos o ponteiro para valer NULL

• Onde começa uma lista encadeada?

– Precisamos de um ponteiro para isso!

Valor 1

Valor 2

Valor 3

NULL

Page 17: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Representando Listas Encadeadas

Valor 1

Valor 2

Valor 3

NULL

Cada elemento da lista encadeada é

uma struct

Criaremos uma struct chamada

no

Page 18: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Representando Listas Encadeadas

Valor 1

Valor 2

Valor 3

NULL

Cada “no” é composto de uma

informação

E de um ponteiro para outro “no”

Page 19: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Representando Listas Encadeadas

Valor 1

Valor 2

Valor 3

NULL

struct no { int valor; no * ptr; };

O primeiro nó é apontado por um simples ponteiro

Page 20: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Representando Listas Encadeadas

Valor 1

Valor 2

Valor 3

NULL

struct no { int valor; no *ptr; }; no *lista;

Page 21: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

INICIALIZANDO LISTAS ENCADEADAS E

INSERINDO NÓS

Page 22: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inicializando NULL

no *lista = NULL;

Quando criamos uma lista, ela está vazia

lista

Page 23: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL

NULL

no *tmp; tmp = new no; tmp->valor = 1; tmp->ptr = NULL

Como criamos um elemento?

lista

tmp

Page 24: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL

NULL

if (lista == NULL) { lista = tmp; }

Como colocar o elemento na lista?

lista

tmp

Page 25: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL if (lista == NULL) { lista = tmp; }

Como colocar o elemento na lista?

lista

tmp

Page 26: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL

if (lista == NULL) { lista = tmp; }

E para acrescentar um outro elemento?

2

NULL

lista

tmp

Page 27: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL

if (lista == NULL) { lista = tmp; } else { tmp->ptr = lista }

E para acrescentar um outro elemento?

2

lista

tmp

Page 28: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL

if (lista == NULL) { lista = tmp; } else { tmp->ptr = lista lista = tmp; }

E para acrescentar um outro elemento?

2

lista

tmp

Page 29: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL

if (lista == NULL) { lista = tmp; } else { tmp->ptr = lista lista = tmp; }

E para acrescentar um outro elemento?

2

lista

tmp 3

NULL

Page 30: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL

if (lista == NULL) { lista = tmp; } else { tmp->ptr = lista lista = tmp; }

E para acrescentar um outro elemento?

2

lista

tmp 3

Page 31: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Inserção

1

NULL

if (lista == NULL) { lista = tmp; } else { tmp->ptr = lista lista = tmp; }

E para acrescentar um outro elemento?

2

lista

tmp 3

Page 32: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

NULL

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 33: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

NULL

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 34: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

NULL

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 35: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

NULL

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 36: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

NULL

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 37: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

NULL

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 38: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

NULL

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 39: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

NULL

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 40: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Listar/Percorrer

1

Como percorrer uma lista encadeada?

2

lista

3

Basta seguir os ponteiros...

Page 41: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Remoção

1

NULL

Como remover o primeiro elemento?

2

lista

3

if (lista != NULL) { tmp = lista->ptr; lista->ptr = tmp->ptr; delete tmp; }

Page 42: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Remoção

1

NULL

Como remover o primeiro elemento?

2

lista

3

if (lista != NULL) { tmp = lista->ptr; lista->ptr = tmp->ptr; delete tmp; }

Page 43: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Remoção

1

NULL

Como remover o primeiro elemento?

2

lista

tmp 3

if (lista != NULL) { tmp = lista->ptr; lista->ptr = tmp->ptr; delete tmp; }

Page 44: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Remoção

1

NULL

Como remover o primeiro elemento?

2

lista

tmp 3

if (lista != NULL) { tmp = lista->ptr; lista->ptr = tmp->ptr; delete tmp; }

Page 45: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Remoção

1

NULL

Como remover o primeiro elemento?

2

lista

tmp 3

if (lista != NULL) { tmp = lista->ptr; lista->ptr = tmp->ptr; delete tmp; }

Page 46: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Remoção

1

NULL

Como remover o primeiro elemento?

2

lista

tmp 3

if (lista != NULL) { tmp = lista->ptr; lista->ptr = tmp->ptr; delete tmp; }

Page 47: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Listas Encadeadas: Remoção

1

NULL

Como remover o primeiro elemento?

2

lista

tmp

if (lista != NULL) { tmp = lista->ptr; lista->ptr = tmp->ptr; delete tmp; }

Page 48: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Operações Com Listas Encadeadas

• Vistas – Inicialização

– Inserção no Início

– Listar / Percorrer

– Remover

• Para pensar: – Buscar

– Inserir no final

– Inserir no meio

– Remover do meio

Page 49: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

NA PRÁTICA:

IMPLEMENTANDO UMA LISTA ENCADEADA

Page 50: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Implementação de Lista Encadeada

• Acompanhe o professor... Inicialização e inserção!

• Criação de uma lista com “n” nós

• Função Listar/Percorrer

• Função de Substituição de valores

• Função de Remoção de Nó

Page 51: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

EXERCÍCIOS DE FIXAÇÃO

Page 52: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Exercício • Crie uma função para BUSCAR o primeiro nó

que possua um determinado valor:

no * buscar(no * lista, int valor)

• Modifique o programa principal para que o usuário possa verificar se um valor específico ocorre na lsita

• Após a tentativa de execução, “visite” pelo menos dois colegas e veja como ele implementou a solução; tente compreender a forma do colega de raciocinar.

Page 53: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

CONCLUSÕES

Page 54: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

Resumo

• As listas encadeadas permitem construir listas de tamanho abritrário

• Apenas a memória necessária é gasta

• O jeito de programar é diferente, mas as funções são muito parecidas!

• Como usar esse conceito para construir uma pilha?

Page 55: ESTRUTURA DE ADOS - Caetano •Lista Encadeada: lista de elementos interligados, como em uma corrente •Para acrescentar outro elemento no fim? •Criar o novo elemento •Associá-lo

PERGUNTAS?