algoritmos e estrutura de dados - engenharia da ... · algoritmos e estrutura de dados aula 08 –...
TRANSCRIPT
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
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:
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"
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
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
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
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)
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
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.
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.
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