• Nenhum resultado encontrado

Algoritmos e Estruturas de Dados I PILHAS. Prof. Tiago Eugenio de Melo

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmos e Estruturas de Dados I PILHAS. Prof. Tiago Eugenio de Melo"

Copied!
99
0
0

Texto

(1)

Algoritmos e Estruturas de Dados I

PILHAS

Prof. Tiago Eugenio de Melo

tmelo@uea.edu.br www.tiagodemelo.info

(2)

Observações

● O conteúdo dessa aula é parcialmente

proveniente do Capítulo 6 do livro “Data

Structures and Algorithms in Python”.

● As palavras com a fonte Courier indicam uma

palavra-reservada da linguagem de programação.

(3)
(4)

Introdução

● Coleção de objetos que são inseridos e

removidos de acordo com o seguinte princípio:

(5)

Introdução

● Coleção de objetos que são inseridos e

removidos de acordo com o seguinte princípio:

LIFO (last in, first out).

● O usuário insere objetos em uma pilha a

qualquer momento, mas somente pode acessar ou remover o último (topo) objeto inserido.

(6)
(7)
(8)
(9)
(10)

Introdução

É possível tirar um

(11)

Introdução

É possível tirar um

(12)

Introdução

(13)
(14)

Aplicações (1/2)

● Navegadores web armazenam os endereços

(15)

Aplicações (1/2)

● Navegadores web armazenam os endereços

(URLs) que os usuários visitam em uma pilha.

● Cada vez que o usuário visita um novo site,

este endereço é empilhado (“pushed”) na pilha de endereços.

(16)

Aplicações (1/2)

● Navegadores web armazenam os endereços

(URLs) que os usuários visitam em uma pilha.

● Cada vez que o usuário visita um novo site,

este endereço é empilhado (“pushed”) na pilha de endereços.

● O navegador então permite que o usuário “pop”

(17)
(18)

Aplicações (2/2)

● Editores de texto geralmente fornecem um

mecanismo de “voltar” (undo) que cancela as operações recentes de edição e reverte o

(19)

Aplicações (2/2)

● Editores de texto geralmente fornecem um

mecanismo de “voltar” (undo) que cancela as operações recentes de edição e reverte o

estado anterior do documento.

Essa operação de undo pode ser manipulada

por manter as mudanças do texto em uma pilha.

(20)
(21)

TAD Pilha

● Apesar de ser uma estrutura simples, ainda é

(22)

TAD Pilha

● Apesar de ser uma estrutura simples, ainda é

considerada como uma das mais importantes.

(23)

TAD Pilha

● Apesar de ser uma estrutura simples, ainda é

considerada como uma das mais importantes.

Uma pilha S deverá ter os seguintes métodos:

(24)

TAD Pilha

● Apesar de ser uma estrutura simples, ainda é

considerada como uma das mais importantes.

Uma pilha S deverá ter os seguintes métodos:

S.push(e)

(25)

TAD Pilha

● Apesar de ser uma estrutura simples, ainda é

considerada como uma das mais importantes.

Uma pilha S deverá ter os seguintes métodos:

S.push(e)

Adiciona um elemento e no topo da pilha S.S.pop( )

(26)

TAD Pilha

● Apesar de ser uma estrutura simples, ainda é

considerada como uma das mais importantes.

Uma pilha S deverá ter os seguintes métodos:

S.push(e)

Adiciona um elemento e no topo da pilha S.S.pop( )

(27)

TAD Pilha

● Apesar de ser uma estrutura simples, ainda é

considerada como uma das mais importantes.

Uma pilha S deverá ter os seguintes métodos:

S.push(e)

Adiciona um elemento e no topo da pilha S.S.pop( )

Remove e retorna o elemento do topo da pilha S.

● Deve ser apresentada uma mensagem especial se a

(28)
(29)

TAD Pilha

(30)

TAD Pilha

● Outros métodos adicionais:

(31)

TAD Pilha

● Outros métodos adicionais:

S.top ( )

Retorna uma referência ao elemento do topo da pilha S,

(32)

TAD Pilha

● Outros métodos adicionais:

S.top ( )

Retorna uma referência ao elemento do topo da pilha S,

mas sem removê-lo da pilha.

● Deve ser apresentada uma mensagem especial se a

(33)

TAD Pilha

● Outros métodos adicionais:

S.top ( )

Retorna uma referência ao elemento do topo da pilha S,

mas sem removê-lo da pilha.

● Deve ser apresentada uma mensagem especial se a

pilha estiver vazia.

(34)

TAD Pilha

● Outros métodos adicionais:

S.top ( )

Retorna uma referência ao elemento do topo da pilha S,

mas sem removê-lo da pilha.

● Deve ser apresentada uma mensagem especial se a

pilha estiver vazia.

S.is_empty ( )

(35)

TAD Pilha

● Outros métodos adicionais:

S.top ( )

Retorna uma referência ao elemento do topo da pilha S,

mas sem removê-lo da pilha.

● Deve ser apresentada uma mensagem especial se a

pilha estiver vazia.

S.is_empty ( )

● Retorna True se a pilha S está vazia. – len (S)

(36)

TAD Pilha

● Outros métodos adicionais:

S.top ( )

Retorna uma referência ao elemento do topo da pilha S, mas

sem removê-lo da pilha.

● Deve ser apresentada uma mensagem especial se a pilha

estiver vazia.

S.is_empty ( )

● Retorna True se a pilha S está vazia.

(37)
(38)
(39)
(40)
(41)
(42)
(43)
(44)
(45)
(46)
(47)
(48)
(49)
(50)
(51)
(52)
(53)
(54)
(55)
(56)

Pilha baseada em Lista

● Nós podemos implementar uma pilha

facilmente por armazenar os seus elementos em uma lista em Python.

(57)

Pilha baseada em Lista

● Nós podemos implementar uma pilha

facilmente por armazenar os seus elementos em uma lista em Python.

● Lembre-se que a classe List em Python já

possui um método para adicionar um elemento ao final da lista (append) e outro método para remover o último elemento (pop).

(58)
(59)

Pilha baseada em Lista

● Qual é o problema de usar a representação

(60)

Pilha baseada em Lista

● Qual é o problema de usar a representação

anterior?

– Listas também possuem comportamentos que

(61)

Pilha baseada em Lista

● Qual é o problema de usar a representação

anterior?

– Listas também possuem comportamentos que

contradizem a abstração que uma pilha representa.

(62)

Pilha baseada em Lista

● Qual é o problema de usar a representação

anterior?

– Listas também possuem comportamentos que

contradizem a abstração que uma pilha representa.

● Exemplo: remover um elemento do meio da lista.

– A nomenclatura usada entre os métodos de pilha e

(63)

Pilha baseada em Lista

● Qual é o problema de usar a representação

anterior?

– Listas também possuem comportamentos que

contradizem a abstração que uma pilha representa.

● Exemplo: remover um elemento do meio da lista.

– A nomenclatura usada entre os métodos de pilha e

lista são distintos.

(64)
(65)

Pilha baseada em Lista (na mão)

● Nós precisamos adaptar os métodos já

(66)

Pilha baseada em Lista (na mão)

● Nós precisamos adaptar os métodos já

existentes da classe List para o TAD Pilha.

● Pilha S como uma adaptação da uma lista L

(67)

Pilha baseada em Lista (na mão)

● Nós precisamos adaptar os métodos já

existentes da classe List para o TAD Pilha.

● Pilha S como uma adaptação da uma lista L

(68)

Pilha baseada em Lista (na mão)

● Nós precisamos adaptar os métodos já

existentes da classe List para o TAD Pilha.

● Pilha S como uma adaptação da uma lista L

(69)

Pilha baseada em Lista (na mão)

● Nós precisamos adaptar os métodos já

existentes da classe List para o TAD Pilha.

● Pilha S como uma adaptação da uma lista L

(70)

Pilha baseada em Lista (na mão)

● Nós precisamos adaptar os métodos já

existentes da classe List para o TAD Pilha.

● Pilha S como uma adaptação da uma lista L

(71)

Pilha baseada em Lista (na mão)

● Nós precisamos adaptar os métodos já

existentes da classe List para o TAD Pilha.

● Pilha S como uma adaptação da uma lista L

(72)

Pilha baseada em Lista (na mão)

● Nós precisamos adaptar os métodos já

existentes da classe List para o TAD Pilha.

● Pilha S como uma adaptação da uma lista L

(73)

criar uma pilha vazia

calcular o número de elementos da pilha checar se a pilha está vazia

empilhar um elemento

descobrir o elemento do topo da pilha (isso não é desempilhar)

(74)

calcular o número de elementos da pilha checar se a pilha está vazia

empilhar um elemento

descobrir o elemento do topo da pilha (isso não é desempilhar)

(75)

checar se a pilha está vazia empilhar um elemento

descobrir o elemento do topo da pilha (isso não é desempilhar)

(76)

empilhar um elemento

descobrir o elemento do topo da pilha (isso não é desempilhar)

(77)

descobrir o elemento do topo da pilha (isso não é desempilhar)

(78)
(79)
(80)

Exemplo de execução (código

anterior)

(81)

Pilha baseada em lista

(82)

Pilha baseada em lista

(83)

Pilha baseada em lista

(84)

Pilha baseada em lista

(85)

Pilha baseada em lista

(86)

Pilha baseada em lista

(87)
(88)

Pilha baseada em Lista (aplicação)

(89)

Pilha baseada em Lista (aplicação)

● Um algoritmo para casamento de delimitadores

– Uma importante tarefa no processamento de

expressões aritméticas é garantir que os símbolos dos delimitadores estão corretamente colocados.

(90)

Pilha baseada em Lista (aplicação)

● Um algoritmo para casamento de delimitadores

– Uma importante tarefa no processamento de

expressões aritméticas é garantir que os símbolos dos delimitadores estão corretamente colocados.

(91)

Pilha baseada em Lista (aplicação)

● Um algoritmo para casamento de delimitadores

– Uma importante tarefa no processamento de

expressões aritméticas é garantir que os símbolos dos delimitadores estão corretamente colocados.

– Exemplo:

(92)

Pilha baseada em Lista (aplicação)

● Um algoritmo para casamento de delimitadores

– Uma importante tarefa no processamento de

expressões aritméticas é garantir que os símbolos dos delimitadores estão corretamente colocados.

– Exemplo:

● [(5+x) – (y+z)]

(93)

Pilha baseada em Lista (aplicação)

(94)

Pilha baseada em Lista (aplicação)

● Algoritmo

(95)

Pilha baseada em Lista (aplicação)

● Algoritmo

● Leitura feita da esquerda para direita.

● Cada vez que encontramos um símbolo de abertura, nós

(96)

Pilha baseada em Lista (aplicação)

● Algoritmo

● Leitura feita da esquerda para direita.

● Cada vez que encontramos um símbolo de abertura, nós

empilhamos na pilha S.

● Cada vez que encontramos um símbolo de fechamento,

nós desempilhamos um símbolo de S e verificamos se os dois símbolos formam um par válido.

(97)

Pilha baseada em Lista (aplicação)

● Algoritmo

● Leitura feita da esquerda para direita.

● Cada vez que encontramos um símbolo de abertura, nós

empilhamos na pilha S.

● Cada vez que encontramos um símbolo de fechamento,

nós desempilhamos um símbolo de S e verificamos se os dois símbolos formam um par válido.

● Se chegarmos ao final da expressão e a pilha estiver

vazia, então a expressão está bem formada. Caso contrário, há um problema na expressão.

(98)
(99)

Pilha baseada em Lista

● Outras aplicações

Referências

Documentos relacionados

Quase todos estão de acordo quando afirmam que o trabalho com informação não é exclusivo de uma área profissional, e com a idéia de uma crescente integração de

O comparativo da participação dos veículos em acidentes de trânsito consiste na diferença percentual entre os anos de 2011 e 2010. Destaca-se a participação da

Escreva uma query para mostrar o nome do empregado e data de contratação para todos os empregados do departamento do Blake. Crie uma query para mostrar o número e nome dos

● Também conhecido como Bubble Sort. 10

Uma pilha é uma estrutura de dados que fornece duas operações de tempo de O(1): adicionando um elemento na parte superior e removendo um elemento da parte

– Sistemas de software são intrisicamente complicados  e  têm  se  tornado  ainda  mais  complicados  com  os 

– O algoritmo intuitivo para testes de isomorfismo consiste em analisar as permutações de linhas e colunas de matrizes de equivalência, em busca de uma relação um-para-um, ou

inserir mais elementos na fila, mesmo quando ela não está cheia, as referências primeiro e último circundam até o início do vetor,. resultando numa