algoritmos e estrutura de dados - engenharia da ... · algoritmos e estrutura de dados aula 08 –...

11
2/13/17 1 Algoritmos e Estrutura de Dados Aula 08 – Pilhas Profa. Alana Oliveira e Prof. Davi Viana [email protected] e [email protected] Se não entender, pergunte! Profa. Alana Oliveira, ECP / UFMA 2

Upload: ledang

Post on 12-Nov-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

1

Algoritmos e Estrutura de DadosAula 08 – Pilhas

Profa. Alana Oliveira e Prof. Davi [email protected] e [email protected]

Se não entender, pergunte!

Profa. Alana Oliveira, ECP / UFMA 2

Page 2: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

2

Dados e Tipos de Dados• Um dado é uma informação que um algoritmo recebe ou

manipula;

• Exemplos de dados são: • Nomes, datas, valores (preços, notas, etc.) e condições (verdadeiro e falso)

• Todo dado é de um certo tipo que define sua natureza (p. ex., um nome é diferente de um valor numérico), identificando seu uso, e define as operações que podem ser realizadas com o dado;

• Por exemplo, podemos somar dois valores numéricos, mas não podemos somar um número e uma frase.

Profa. Alana Oliveira, ECP / UFMA 3

Dados e Tipos de Dados

Tipos de dados atômicos:• int e float : +, - *, /, %• bool: and, or, not

• Tipos de dados de coleção:• Listas : criar, acessar, modificar, etc• Tuplas: criar, acessar, etc• String: criar, acessar, concatenar, etc• Dicionários: criar, acessar, modificar, etc

Profa. Alana Oliveira, ECP / UFMA 4

Em Python:

Page 3: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

3

Estrutura de Dados (ED)

Definição: organização de dados e operações (algoritmos) que podem ser aplicados sobres esses dados como forma de apoio à solução de problemas.

Exemplos de EDs:• Pilhas• Filas• Listas lineares• Árvores

Profa. Alana Oliveira, ECP / UFMA 5

Uma pilha é uma coleção ordenada de zero ou mais itens, de um mesmo tipo ou não, tal que suas operações principais são realizadas na mesma extremidade, denominada topo.

Pilhas – Definição

"Designed by Asierromero / Freepik"

Page 4: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

4

Pilhas – DefiniçãoAs operações básicas das pilhas são:

• Empilhar: insere um novo item no topo daestrutura.

•Desempilhar: remove o item do topo da estrutura

Profa. Alana Oliveira, ECP / UFMA 7

Pilhas – DefiniçãoAs operações Empilhar / Desempilhar seguem a ordem: o último item a entrar no conjunto é o primeiro item a sair:

• Last in / First out (LIFO)•Último a entrar / Primeiro a sair

Profa. Alana Oliveira, ECP / UFMA 8

7

24topo

Page 5: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

5

Pilhas Comportamento

Profa. Alana Oliveira, ECP / UFMA 9

1 1 1 1 12 2 2 2

3 3 34 4

5

12345

12

34

123

12

1

1 2 3 4 5

Empilhar:

5 4 3 2 1

Desempilhar:

Observação: Percebam o comportamento de pilha: o último resto a ser calculado é o primeiroresto utilizado na composição do número binário.

Pilhas: Conversão Decimal→BinárioConverta o número 123(10) para binário

• Método das divisões sucessivas

Profa. Alana Oliveira, ECP / UFMA 10

Page 6: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

6

Observação: Percebam o comportamento de pilha: a última função a ser chamada é a primeirafunção a ter a execução completada.

Pilhas: Chamada de FunçãoControle de chamada de funções

Profa. Alana Oliveira, ECP / UFMA 11

Pilhas: Cotidiano• Undo/Redo no editor de textos

• Ir para frente / ir para a trás no navegador

Profa. Alana Oliveira, ECP / UFMA 12

Page 7: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

7

Pilhas: OperaçõesAs operações comumente utilizadas em pilhassão:

• Empilhar: insere um novo item no topo da estrutura.• Desempilhar: remove o item do topo da estrutura,

retornando-o.• Vazia: verifica se a pilha está vazia.• Topo: retorna o item no topo da estrutura, sem removê-lo.• Tamanho: retorna a quantidade de item na estrutura.

Profa. Alana Oliveira, ECP / UFMA 13

Pilhas: Implementação por meio de listas em Python

Profa. Alana Oliveira, ECP / UFMA 14

# ou return (len(self.items) == 0)

Page 8: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

8

Pilhas: Implementação por meio de listas em Python

Profa. Alana Oliveira, ECP / UFMA 15

• Notação Infixa:•A+B*C•É ambígua•Necessidade de precedência de operadores ou do uso deparênteses

• Notação Prefixa (Polonesa):•-*AB/CD = (A*B)-(C/D)•Operadores precedem operandos•Dispensa o uso de parênteses

• Notação Posfixa (Polonesa reversa):•AB*CD/- = (A*B)-(C/D)•Operadores sucedem operandos•Dispensa o uso de parênteses

Profa. Alana Oliveira, ECP / UFMA 16

Pilhas: Avaliação de Expressõesaritméticas

Page 9: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

9

Expressões na notação Posfixa podem ser avaliadasutilizando uma pilha.

• A expressão é avaliada da esquerda para a direita.• Os operandos são empilhados.• Os operadores fazem com que dois operandos

sejam desempilhados, o cálculo seja realizado e oresultado seja empilhado.

Profa. Alana Oliveira, ECP / UFMA 17

Pilhas: Avaliação de Expressõesaritméticas

Pilhas: Avaliação de Expressõesaritméticas

Expressões na notação Posfixa podem ser avaliadasutilizando uma pilha.

• Exemplo: 62/34*+3-

Profa. Alana Oliveira, ECP / UFMA 18

Observação:Nesteexemplo,otopodapilhaérepresentadopelaposiçãomaisàesquerdadeP.

Page 10: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

10

Pilhas: Avaliação de Expressõesaritméticas

Expressões na notação Infixa podem ser convertidaspara a notação Posfixa utilizando uma pilha.

Profa. Alana Oliveira, ECP / UFMA 19

Pilhas: Avaliação de Expressõesaritméticas

Expressões na notação Infixa podem ser convertidaspara a notação Posfixa utilizando uma pilha.

• Exemplo: A*(B+C)/D

Profa. Alana Oliveira, ECP / UFMA 20

Observação:Nesteexemplo,otopodapilhaérepresentadopelaposiçãomaisàesquerdadeP.

Page 11: Algoritmos e Estrutura de Dados - Engenharia da ... · Algoritmos e Estrutura de Dados Aula 08 – Pilhas ... Implementação por meio de listas em Python ... •A+B*C •É ambígua

2/13/17

11

Exercício• Escreva uma função em Python que receba uma sequência de

parênteses e colchetes e retorne True se ela está bem formadaou False, caso contrário.

• Escreva um programa em Python que leia uma expressão nanotação Posfixa e realize sua avaliação.

• Escreva um programa em Python que leia uma expressão emnotação Infixa e converta-a para Posfixa.

Profa. Alana Oliveira, ECP / UFMA 21

Bem formada!Mal formada!

Material Complementar

• http://www3.ifrn.edu.br/~jurandy/fdp/doc/aprenda-python/capitulo_18.html

• http://interactivepython.org/runestone/static/pythonds/BasicDS/ImplementingaStackinPython.html

Profa. Alana Oliveira, ECP / UFMA 22