MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017....
Transcript of MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017....
![Page 1: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/1.jpg)
MC202 - Estruturas de DadosEmilio Francesquini
Instituto de Computação - UNICAMP
Aula 04 - 14 de março de 2017
![Page 2: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/2.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/3.jpg)
Pilhas
MC202 - Aula 4 Pilhas 3 / 37
![Page 4: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/4.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/5.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/6.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/7.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/8.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/9.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/10.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/11.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/12.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/13.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/14.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/15.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/16.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/17.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/18.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/19.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/20.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/21.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/22.jpg)
Mão na massa!
Let’s code!
MC202 - Aula 4 Pilhas 21 / 37
![Page 23: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/23.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/24.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/25.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/26.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/27.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/28.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/29.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/30.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/31.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/32.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/33.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/34.jpg)
Mão na massa!
Let’s code 2!
MC202 - Aula 4 Pilhas 33 / 37
![Page 35: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/35.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/36.jpg)
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 Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/37.jpg)
Balanceamento - Exemplo
MC202 - Aula 4 Pilhas 36 / 37
![Page 38: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula04.pdf · Aula 04 - 14 de março de 2017. Disclaimer • Esses slides foram preparados para um curso de Estrutura de Dados](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0752df7e708231d41c6b21/html5/thumbnails/38.jpg)
Mão na massa!
Let’s code 3!
MC202 - Aula 4 Pilhas 37 / 37