51
E STRUTURA DE D ADOS Prof. Dr. Daniel Caetano 2012 - 2 PILHAS DINÂMICAS E EXERCÍCIOS COM LISTAS ENCADEADAS

ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

ESTRUTURA DE DADOS

Prof. Dr. Daniel Caetano

2012 - 2

PILHAS DINÂMICAS E EXERCÍCIOS COM LISTAS ENCADEADAS

Page 2: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Objetivos

• Compreender como usar uma lista ligada como uma pilha

• Usar pilhas dinâmicas para aplicações

• Treinar construção de operações com listas ligadas

• Atividade Estruturada!

Page 3: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Material de Estudo

Material Acesso ao Material

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

Material Didático Estruturas de Dados (Parte 2) – Páginas 132 a 136

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

Page 4: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

RECORDANDO...

Page 5: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Recordando...

• Vimos Listas Encadeadas

• Uso:

– Inserção no Início

– Remoção do Início

• E se chamarmos o início de “topo”?

• Virou uma pilha?

Page 6: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

PILHA ENCADEADA OU PILHA DINÂMICA

Page 7: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilhas Encadeadas

• Sempre que usarmos uma lista

– Inserirmos / Removermos do início... Ou

– Inserirmos / Removermos do fim...

• Pilha Dinâmica ou Encadeada

• Exemplo

Page 8: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inicializando NULL

no *pilha = NULL;

Quando criamos uma pilha, ela está vazia

pilha

Page 9: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

NULL

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

Como criamos um elemento?

pilha

tmp

Page 10: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

NULL

tmp->prox = pilha; pilha = tmp;

Como inseri-lo na pilha?

pilha

tmp

Page 11: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

NULL

tmp->prox = pilha; pilha = tmp;

Como inseri-lo na pilha?

pilha

tmp

Page 12: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

NULL

tmp->prox = pilha; pilha = tmp;

Como inseri-lo na pilha?

pilha

tmp

Page 13: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

tmp->prox = pilha; pilha = tmp;

Como inseri-lo na pilha?

pilha

tmp

Page 14: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

Page 15: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

Page 16: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp

Page 17: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp

Page 18: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp ??

??

Page 19: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp ??

??

Page 20: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp 2

??

Page 21: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp 2

??

Page 22: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp 2

Page 23: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp 2

Page 24: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Inserção

1

NULL

no *tmp; tmp = new no; tmp->valor = 2; tmp->prox = pilha; pilha = tmp;

Inserindo outro nó pilha

tmp 2

Page 25: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

2

Page 26: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

2

Page 27: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp 2

Page 28: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp 2

Page 29: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp 2

Page 30: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp 2

Page 31: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp 2

Page 32: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp 2

Page 33: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp 2 2

Page 34: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp 2

Page 35: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Pilha: Remoção

1

NULL

no *tmp; tmp = pilha; pilha = tmp->prox; valor = tmp->valor; delete tmp;

Removendo um nó pilha

tmp

Page 36: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

EXERCÍCIO 1:

USANDO UMA PILHA ENCADEADA

Page 37: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Exercício 1 • Converter um número para binário:

– Dividir por 2 e anotar o resto (da dir para esq.)

– Pegar parte inteira...

– Dividir por 2 e anotar o resto...

Page 38: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Conversão D→B

• Regra prática: converter 13 para binário

• 13/2 = 6... Resto 1

1b

Page 39: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Conversão D→B

• Regra prática: converter 13 para binário

• 13/2 = 6... Resto 1

• 6/2 = 3... Resto 0

1b 01b

Page 40: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Conversão D→B

• Regra prática: converter 13 para binário

• 13/2 = 6... Resto 1

• 6/2 = 3... Resto 0

• 3/2 = 1... Resto 1

01b 101b

Page 41: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Conversão D→B

• Regra prática: converter 13 para binário

• 13/2 = 6... Resto 1

• 6/2 = 3... Resto 0

• 3/2 = 1... Resto 1

• 1/2 = 0... Resto 1

101b 1101b

Page 42: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Conversão D→B

• Regra prática: converter 13 para binário

• 13/2 = 6... Resto 1

• 6/2 = 3... Resto 0

• 3/2 = 1... Resto 1

• 1/2 = 0... Resto 1

• 0 Fim!

1101b

Page 43: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Exercício 1 • O arquivo “ex1.cpp” contém a implementação

de uma lista encadeada.

• O arquivo “binario.cpp” contém a implementação de conversão decimal -> binário em pilha contígua

• Modifique o “ex1.cpp” para implementar a conversão usando a lista encadeada como uma pilha

Page 44: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

EXERCÍCIOS DE FIXAÇÃO

Page 45: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Exercício 2 • Como base em “ex2.cpp” implemente:

– Modifique-o para que leia valores inteiros positivos... Até que o valor digitado seja <= 0

– Faça o programa principal imprimir todos os dados da lista

– Faça uma função que imprima apenas os dados ímpares (e use-a!)

– Faça uma função que imprima apenas os múltiplos de 5 (e use-a!)

– Faça uma função que conta os nós da lista e use-a!

– Faça uma função que busque um valor e o substitua pelo seu triplo!

Page 46: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Exercício 3 • Como base em “ex3.cpp” e “calculadora.cpp”,

implemente a calculadora usando pilha dinâmica.

Page 47: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

CONCLUSÕES

Page 48: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Resumo

• As listas encadeadas permitem seu uso na forma de pilha

• Adaptar programas que usam listas e pilhas contíguas para usar listas ligadas é simples

• TAREFA

– Atividade Estruturada!

Page 49: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

Próxima Aula

• É possível implementar filas dinâmicas?

Page 50: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

PERGUNTAS?

Page 51: ESTRUTURA DE ADOS - Caetano...–Faça o programa principal imprimir todos os dados da lista –Faça uma função que imprima apenas os dados ímpares (e use-a!) –Faça uma função

BOM DESCANSO A TODOS!