ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e,...

97
E STRUTURA DE D ADOS Prof. Dr. Daniel Caetano 2012 - 2 PILHAS SEQUENCIAIS

Transcript of ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e,...

Page 1: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

ESTRUTURA DE DADOS

Prof. Dr. Daniel Caetano

2012 - 2

PILHAS SEQUENCIAIS

Page 2: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Objetivos

• Compreender o que é uma estrutura em pilha

• Compreender sua aplicação

• Capacitar para implementar pilhas

• Atividade Estruturada!

Page 3: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Material de Estudo

Material Acesso ao Material

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

Biblioteca Virtual Estruturas de Dados – -?

Page 4: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

RECORDANDO...

Page 5: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Recordando...

• Podemos criar listas

– Ordenadas e não ordenadas

• Listas: acrescento...

– Não ordenada: no fim

– Ordenada: no lugar correto

• Listas: removo...

– De qualquer lugar

• Sempre precisamos dessa flexibilidade?

Page 6: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

ORDEM DE RETIRADA X ORDEM DE ARMAZENAMENTO

Page 7: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• É comum: ordem de remoção → armazenam.

• Exemplo: organizando entregas de Pizza

Page 8: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• O que ocorre na Pizzaria?

Page 9: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• O que ocorre na Pizzaria?

Page 10: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• O que ocorre na Pizzaria?

Page 11: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• O que ocorre na Pizzaria?

Page 12: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• O que ocorre na Pizzaria?

Page 13: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• O que ocorre na Pizzaria?

Page 14: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• O que ocorre na Pizzaria?

Page 15: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• O que ocorre na Pizzaria?

Page 16: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• E nas entregas?

Page 17: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• E nas entregas?

Page 18: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• E nas entregas?

Page 19: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• E nas entregas?

Page 20: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• E nas entregas?

Page 21: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• E nas entregas?

Page 22: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• E nas entregas?

Page 23: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• E nas entregas?

Page 24: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Ordem de Retirada x Armazenam.

• Observe...

– A última pizza a entrar...

– Será a primeira a sair...

LIFO:

Last In First Out

Page 25: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

MOMENTO LÚDICO: PILHA DE CADERNOS

Page 26: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

PILHAS DE DADOS

Page 27: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas

• Estrutura de dados Pilha: Lista LIFO

• Inserir: sempre no fim da lista (topo da pilha)

• Remover: sempre do fim da lista (topo da pilha)

• Isso é útil em software?

– Vejamos alguns casos!

Page 28: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas

• Já observou o recurso de “desfazer” do Word?

• Qual operação ele desfaz?

• Word coloca as operações em uma pilha!

Page 29: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

2 5 7 8 10

Page 30: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

2 5 7 8 10

2

Page 31: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

2 5 7 8 10

5

2

Page 32: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

2 5 7 8 10

7

5

2

Page 33: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

2 5 7 8 10

8

7

5

2

Page 34: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10

2 5 7 8 10

10

8

7

5

2

Page 35: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10

2 5 7 8 10

8

7

5

2

Page 36: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10, 8

2 5 7 8 10

8

7

5

2

Page 37: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10, 8

2 5 7 8 10

7

5

2

Page 38: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10, 8, 7

2 5 7 8 10

7

5

2

Page 39: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10, 8, 7

2 5 7 8 10

5

2

Page 40: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10, 8, 7, 5

2 5 7 8 10

5

2

Page 41: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10, 8, 7, 5

2 5 7 8 10

2

Page 42: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Invertendo Elementos

• Se você tem uma lista crescente...

• Uma série de trocas... Ou...

– Empilhar e desempilhar!

10, 8, 7, 5, 2

2 5 7 8 10

2

Page 43: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

Page 44: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

Page 45: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

2

Page 46: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

+

2

Page 47: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

3

+

2

3 + 2 = 5

Page 48: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

5

Page 49: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

5

Page 50: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

*

5

Page 51: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

5

*

5

5 * 5 = 25

Page 52: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

25

Page 53: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

25

Page 54: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

+

25

Page 55: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

3

+

25

Page 56: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

/

3

+

25

Page 57: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

3

/

3

+

25

Page 58: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

*

3

/

3

+

25

Page 59: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

7

*

3

/

3

+

25

7 * 3 = 21

Page 60: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

21

/

3

+

25

Page 61: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

21

/

3

+

25

21 / 3 = 7

Page 62: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

7

+

25

Page 63: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

7

+

25

7 + 25 = 32

Page 64: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Pilhas – Fazendo Cálculos

• Como fazemos esse cálculo?

(((2 + 3) * 5) + (3 / (3 * 7)))

32

Page 65: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

IMPLEMENTANDO UMA PILHA

Page 66: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Pilha: Essencialmente uma lista

pilha:

topo: ??

• Operações:

– Inicializar

– Empilhar

– Desempilhar

0 1 2 3 4 5 6 7 8 9

? ? ? ? ? ? ? ? ? ?

Page 67: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Inicializar Pilha

pilha:

topo: -1

• Topo sempre indica último elemento!

– Como indicar que elemento não existe?

• Vamos implementar

0 1 2 3 4 5 6 7 8 9

? ? ? ? ? ? ? ? ? ?

Page 68: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Empilhar

pilha:

topo: -1

• Como empilhar um valor?

– Se topo < (n-1)... Pode empilhar

– Soma 1 no topo... E acrescenta-se elemento lá

• Vamos empilhar o número 8?

0 1 2 3 4 5 6 7 8 9

? ? ? ? ? ? ? ? ? ?

Page 69: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Empilhar

pilha:

topo: -1

• Como empilhar um valor?

– Se topo < (n-1)... Pode empilhar

– Soma 1 no topo... E acrescenta-se elemento lá

• Vamos empilhar o número 8?

0 1 2 3 4 5 6 7 8 9

? ? ? ? ? ? ? ? ? ?

-1 < 9... Posso Empilhar!

Page 70: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Empilhar

pilha:

topo: 0

• Como empilhar um valor?

– Se topo < (n-1)... Pode empilhar

– Soma 1 no topo... E acrescenta-se elemento lá

• Vamos empilhar o número 8?

0 1 2 3 4 5 6 7 8 9

? ? ? ? ? ? ? ? ? ?

Page 71: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Empilhar

pilha:

topo: 0

• Como empilhar um valor?

– Se topo < (n-1)... Pode empilhar

– Soma 1 no topo... E acrescenta-se elemento lá

• Vamos empilhar o número 8?

• Vamos empilhar o 5?

0 1 2 3 4 5 6 7 8 9

8 ? ? ? ? ? ? ? ? ?

Page 72: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Empilhar

pilha:

topo: 0

• Como empilhar um valor?

– Se topo < (n-1)... Pode empilhar

– Soma 1 no topo... E acrescenta-se elemento lá

• Vamos empilhar o número 8?

• Vamos empilhar o 5?

0 1 2 3 4 5 6 7 8 9

8 ? ? ? ? ? ? ? ? ?

0 < 9... Posso Empilhar!

Page 73: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Empilhar

pilha:

topo: 1

• Como empilhar um valor?

– Se topo < (n-1)... Pode empilhar

– Soma 1 no topo... E acrescenta-se elemento lá

• Vamos empilhar o número 8?

• Vamos empilhar o 5?

0 1 2 3 4 5 6 7 8 9

8 ? ? ? ? ? ? ? ? ?

Page 74: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Empilhar

pilha:

topo: 1

• Como empilhar um valor?

– Se topo < (n-1)... Pode empilhar

– Soma 1 no topo... E acrescenta-se elemento lá

• Vamos empilhar o número 8?

• Vamos empilhar o 5?

0 1 2 3 4 5 6 7 8 9

8 5 ? ? ? ? ? ? ? ?

Page 75: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Empilhar

• Vamos implementar?

int empilhar(int v[], int &topo, int valor);

Page 76: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Desempilhar

pilha:

topo: 5

• Como desempilhar um valor?

– Se topo >= 0... Pode desempilhar

– Lê o elemento... E subtrai 1 do topo...

• Vamos desempilhar um número?

0 1 2 3 4 5 6 7 8 9

7 6 44 22 1 6 ? ? ? ?

Page 77: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Desempilhar

pilha:

topo: 5

• Como desempilhar um valor?

– Se topo >= 0... Pode desempilhar

– Lê o elemento... E subtrai 1 do topo...

• Vamos desempilhar um número?

0 1 2 3 4 5 6 7 8 9

7 6 44 22 1 6 ? ? ? ?

5 ≥ 0... Posso Desempilhar!

Page 78: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Desempilhar

pilha:

topo: 5

• Como desempilhar um valor?

– Se topo >= 0... Pode desempilhar

– Lê o elemento... E subtrai 1 do topo...

• Vamos desempilhar um número?

0 1 2 3 4 5 6 7 8 9

7 6 44 22 1 6 ? ? ? ?

Desempilhamos:

6

Page 79: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Desempilhar

pilha:

topo: 4

• Como desempilhar um valor?

– Se topo >= 0... Pode desempilhar

– Lê o elemento... E subtrai 1 do topo...

• Vamos desempilhar um número?

• Vamos desempilhar outro número?

0 1 2 3 4 5 6 7 8 9

7 6 44 22 1 6 ? ? ? ?

Page 80: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Desempilhar

pilha:

topo: 4

• Como desempilhar um valor?

– Se topo >= 0... Pode desempilhar

– Lê o elemento... E subtrai 1 do topo...

• Vamos desempilhar um número?

• Vamos desempilhar outro número?

0 1 2 3 4 5 6 7 8 9

7 6 44 22 1 6 ? ? ? ?

4 ≥ 0... Posso Desempilhar!

Page 81: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Desempilhar

pilha:

topo: 4

• Como desempilhar um valor?

– Se topo >= 0... Pode desempilhar

– Lê o elemento... E subtrai 1 do topo...

• Vamos desempilhar um número?

• Vamos desempilhar outro número?

0 1 2 3 4 5 6 7 8 9

7 6 44 22 1 6 ? ? ? ?

Desempilhamos:

1

Page 82: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Desempilhar

pilha:

topo: 3

• Como desempilhar um valor?

– Se topo >= 0... Pode desempilhar

– Lê o elemento... E subtrai 1 do topo...

• Vamos desempilhar um número?

• Vamos desempilhar outro número?

0 1 2 3 4 5 6 7 8 9

7 6 44 22 1 6 ? ? ? ?

Page 83: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Implementando Pilhas

• Desempilhar

• Vamos implementar?

int desempilhar(int v[], int &topo, int &valor);

Page 84: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

EXERCÍCIO DE FIXAÇÃO

Page 85: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

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 86: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Conversão D→B

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

• 13/2 = 6... Resto 1

1b

Page 87: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

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 88: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

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 89: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

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 90: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

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 91: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

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

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

– Pega parte inteira...

– Divide por 2 e anotar o resto...

• Dicas

x = a / b → x armazena o quociente se for int

x = a % b → x armazena o resto da div. a/b

Page 92: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Exercício 2 • Construa um programa que leia um vetor de

chars e, usando duas pilhas (ambas de chars) separe em pilhas diferentes os dígitos e as letras.

• Dicas

– cin.getline(char v[], max)

– Último caractere de um texto: ‘\0’

– #include <cctype>

• isdigit(char valor)

• isalpha(char valor)

Page 93: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

CONCLUSÕES

Page 94: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Resumo

• Pilhas: lista do tipo LIFO

• São úteis para

– Inverter resultados / listas

– Armazenar resultados temporariamente

• TAREFA

– Estudar!

Page 95: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

Próxima Aula

• Só isso dá pra fazer com pilha?

–Não!

• Vamos construir algo mais útil! – Calculadora!

Page 96: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

PERGUNTAS?

Page 97: ESTRUTURA DE ADOS - Caetano Exercício 2 •Construa um programa que leia um vetor de chars e, usando duas pilhas (ambas de chars)

BOM DESCANSO A TODOS!