MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 -...

38
MC202 - Estruturas de Dados Emilio Francesquini [email protected] Instituto de Computação - UNICAMP Aula 04 - 14 de março de 2017

Transcript of MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 -...

Page 1: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

MC202 - Estruturas de DadosEmilio Francesquini

[email protected]

Instituto de Computação - UNICAMP

Aula 04 - 14 de março de 2017

Page 2: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Disclaimer

• Esses slides foram preparados para um curso de Estrutura deDados ministrado na UNICAMP

• Este material pode ser usado livremente desde que sejammantidos os créditos dos autores e da instituição.

• Muitos dos exemplos apresentados foram retirados demateriais preparados pelos Profs. T. Kowaltowski e O. Lee daUNICAMP assim como do Prof. P. Feofiloff do IME-USP

Page 3: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas

MC202 - Aula 4 Pilhas 3 / 37

Page 4: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas - Intuição

• Todos tem uma noção intuitiva do que é uma pilha (=stack)• É prático

• Verificar qual é o item no topo da pilha• Colocar algo (=empilhar) no topo (=top) da pilha• Tirar algo (=desempilhar) do topo da pilha

• Um ou mais elementos

• É mais trabalhoso• Retirar um (ou alguns) itens intermediários• Verificar o conteúdo de um elemento que não está no topo

MC202 - Aula 4 Pilhas 4 / 37

Page 5: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas

• Pilhas são uma manifestação do que chamamos de tipoabstrato de dados (=Abstract Data Type)

• Nem falamos sobre a implementação, mas já sabemos quepara ser util ela terá as seguintes operações

• vazio (=empty) – Verifica se a pilha está vazia• empilhar (=push) – Empilha um elemento• desempilhar (=pop) – Desempilha um elemento• consultar (=peek) – Olha o primeiro elemento da lista sem

retirá-lo• Tradicionalmente os nomes em inglês das operações

costumam ser mais utilizados• Mas por alguma razão o nome stack não é tão utilizado

assim...

MC202 - Aula 4 Pilhas 5 / 37

Page 6: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas - Operação

• As seguintes frases resumem o comportamento de umapilha:

• o elemento removido da pilha é o que está lá há menostempo

• o primeiro elemento inserido na pilha é o último a serremovido.

Esta politica de operação é chamada de LIFO (Last-In-First-Out)Quem entrou antes, saí depois...

MC202 - Aula 4 Pilhas 6 / 37

Page 7: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas - Resumindo

• Topo (top): é o lado em que as operações são feitas;• empilhar (push) = inserir no topo;• desempilhar (pop) = remover do topo.

MC202 - Aula 4 Pilhas 7 / 37

Page 8: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas - Implementação

• Veremos duas implementações de pilhas• Estáticas – Utilizando vetores• Dinâmicas – Utilizando listas ligadas

MC202 - Aula 4 Pilhas 8 / 37

Page 9: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas

[4]topo [3]

30 [2]20 [1]10 [0]

• Neste caso o tamanho máximo da pilha é n = 5• topo sempre aponta para o próximo elemento vazio

• A pilha está cheia se o topo = n• A pilha está vazia se o topo = 0

MC202 - Aula 4 Pilhas 9 / 37

Page 10: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] n = 5push(20) [3] topo = 0push(30) [2]pop [1] topo == 0push(40) [0] ← Pilha vazia!push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 10 / 37

Page 11: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] topo = 1push(20) [3] n = 5push(30) [2]pop [1] ←push(40) 10 [0]push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 11 / 37

Page 12: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] topo = 2push(20) [3] n = 5push(30) [2] ←pop 20 [1]push(40) 10 [0]push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 12 / 37

Page 13: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] topo = 3push(20) [3] ← n = 5push(30) 30 [2]pop 20 [1]push(40) 10 [0]push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 13 / 37

Page 14: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] topo = 2push(20) [3] n = 5push(30) [2] ←pop 20 [1]push(40) 10 [0]push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 14 / 37

Page 15: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] topo = 3push(20) [3] ← n = 5push(30) 40 [2]pop 20 [1]push(40) 10 [0]push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 15 / 37

Page 16: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] ← topo = 4push(20) 50 [3] n = 5push(30) 40 [2]pop 20 [1]push(40) 10 [0]push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 16 / 37

Page 17: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] topo = 3push(20) [3] ← n = 5push(30) 40 [2]pop 20 [1]push(40) 10 [0]push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 17 / 37

Page 18: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

push(10) [4] ← topo = 4push(20) 100 [3] n = 5push(30) 40 [2]pop 20 [1]push(40) 10 [0]push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 18 / 37

Page 19: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas Estáticas - Exemplo

←push(10) 200 [4] topo = 5push(20) 100 [3] n = 5push(30) 40 [2]pop 20 [1] topo == 5push(40) 10 [0] Pilha Cheia!push(50)poppush(100)push(200)

MC202 - Aula 4 Pilhas 19 / 37

Page 20: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Manipulando Pilhas Estáticas

• Empilhar (push) – pilha[topo++] = x;• Consultar (peek) – x = pilha[topo - 1];• Desempilhar (pop) – x = pilha[--topo];• Vazio (empty) – topo == 0• Cheio (full) – topo == n

E se em algum momento da execução topo > n?

MC202 - Aula 4 Pilhas 20 / 37

Page 21: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Manipulando Pilhas Estáticas

• Empilhar (push) – pilha[topo++] = x;• Consultar (peek) – x = pilha[topo - 1];• Desempilhar (pop) – x = pilha[--topo];• Vazio (empty) – topo == 0• Cheio (full) – topo == n

E se em algum momento da execução topo > n?BUG!

MC202 - Aula 4 Pilhas 20 / 37

Page 22: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Mão na massa!

Let’s code!

MC202 - Aula 4 Pilhas 21 / 37

Page 23: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas

• Ao contrário das pilhas estáticas, as pilhas dinâmicas nãonecessariamente possuem um tamanho pré-definido

• A implementação é feita com listas ligadas

MC202 - Aula 4 Pilhas 22 / 37

Page 24: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X NULL

MC202 - Aula 4 Pilhas 23 / 37

Page 25: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 10 NULL

MC202 - Aula 4 Pilhas 24 / 37

Page 26: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 20 10 NULL

MC202 - Aula 4 Pilhas 25 / 37

Page 27: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 30 20 10 NULL

MC202 - Aula 4 Pilhas 26 / 37

Page 28: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 20 10 NULL

MC202 - Aula 4 Pilhas 27 / 37

Page 29: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 40 20 10 NULL

MC202 - Aula 4 Pilhas 28 / 37

Page 30: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 50 40 20 10 NULL

MC202 - Aula 4 Pilhas 29 / 37

Page 31: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 40 20 10 NULL

MC202 - Aula 4 Pilhas 30 / 37

Page 32: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 100 40 20 10 NULL

MC202 - Aula 4 Pilhas 31 / 37

Page 33: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Pilhas dinâmicas - Exemplo

push(10)push(20)push(30)poppush(40)push(50)poppush(100)push(200)

X 200 100 40 20 10 NULL

MC202 - Aula 4 Pilhas 32 / 37

Page 34: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Mão na massa!

Let’s code 2!

MC202 - Aula 4 Pilhas 33 / 37

Page 35: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Balanceamento de parênteses

Problema clássico: verificar se uma sequência de [,],( e ) ébalanceada ou bem-formada.

()([])([)]([()]()))(([)([([][()])])[([])[([]])](([((()([](([]))[]))]))

Como resolver este problema?

MC202 - Aula 4 Pilhas 34 / 37

Page 36: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Balanceamento de parênteses

• Comece com a pilha vazia;• Enquanto tiver sı́mbolos na entrada

• Leia o próximo sı́mbolo x da entrada;• Se x = [ ou x = ( então empilhe x;• Se x =] ou x =) então

veja se o que está no topo casa com x;• Se SIM então desempilhe;• Senão Não é balanceada;

• Verifique se a pilha está vazia;• Se SIM então Está balanceada;• Senão Não é balanceada;

MC202 - Aula 4 Pilhas 35 / 37

Page 37: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Balanceamento - Exemplo

MC202 - Aula 4 Pilhas 36 / 37

Page 38: MC202 - Estruturas de Dados - ic.unicamp.brfrancesquini/mc202/files/aula04.pdf · MC202 - Estruturas de Dados Emilio Francesquini francesquini@ic.unicamp.br Instituto de Computação

Mão na massa!

Let’s code 3!

MC202 - Aula 4 Pilhas 37 / 37