Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e...

47
Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura de Dados – Série de Livros Didácos - Informáca - UFRGS

Transcript of Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e...

Page 1: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Pilhas e Filas

Nádia Félix e Hebert Coelho

Vários slides foram adaptados de Nina Edelwais e Renata GalanteEstrutura de Dados – Série de Livros Didáticos - Informática - UFRGS

Page 2: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Pilha

Listas lineares especiaismais usuais

Pilhas e filas

Fila

LIFO Last In First Out o último componente inserido é o primeiro a ser retirado

FIFO First In First Out o primeiro componente inserido é também o primeiro a ser retirado

Page 3: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Consultas

Exclusões Inserções

Topo

Base

Pilhas e Filas

Início FinalInserções

Exclusõese

Consultas

PILHA

FILA

Page 4: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Pilhas

Page 5: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

ConsultasExclusões Inserções

Topo

Base

• Criar uma pilha vazia• Inserir um elemento no topo da pilha• Remover um elemento do topo de pilha• Consultar o topo da pilha• Destruir a pilha• Verificar se é cheia• Verificar se é vazia

Operações sobre PilhasPilhas

Page 6: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Tipos de pilhas

• Alocação estática com acesso sequencial – uso de um array ou vetor

• Alocação dinâmica com acesso encadeado

Page 7: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PilhaSequencialestática

Page 8: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Pilha – Sequencial EstáticaMAX-1

0Pilha

Índicesdo arranjo

• Implementada usando um arranjo

7qtd

Page 9: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PilhaSequencial.h

• O tamanho MAX do array, representada pela constante MAX

• O tipo de dado que será armazenado na pilha, struct aluno

• As funções disponíveis para se trabalhar com essa pilha

Page 10: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PilhaSequencial.c

• As chamadas às bibliotecas necessárias à implementação da pilha

• A definição do tipo que descreve o funcionamento da pilha, struct pilha

• As implementações das funções definidas no arquivo PilhaSequencial.h

Page 11: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PilhaSequencial.h

Page 12: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PilhaSequencial.c

Page 13: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

MAX - 1

Pilha

1. Alocar área para a pilha2. Indicar que a pilha está vazia

Criação da pilhaPilha – contiguidade física

9

8

7

6

5

4

3

2

1

0

0qtd

Page 14: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Destruir a pilha

Page 15: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Tamanho da pilha

Page 16: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Retornando se a pilha está cheia

Page 17: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Retornando se a pilha está vazia

Page 18: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

MAX -1

Pilha

MAX - 1

Pilha

9876543210

Operação PUSH

Inserção de um elemento na pilha

9

8

7

6

5

4

3

2

1

0 4qtd3qtd

Page 19: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Inserindo um elemento na pilha

Page 20: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

MAX - 1

Pilha

MAX - 1

Pilha

Operação POP

Remoção de um elemento da pilha

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

04qtd5qtd

Page 21: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Removendo um elemento da pilha

Page 22: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

?

MAX - 1

Topo

Pilha

9876543210

Consulta o topa da pilha

• Acesso somente ao elemento do topo da pilha

Page 23: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Complexidade

• Inserção, remoção e consulta: O(1)

Page 24: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Pilhas implementadas por encadeamento

Page 25: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Base

Topo

inserções

remoções

?consultas

PtPilha

Info prox

Topo da pilha

Endereço do topo da pilha

Pilha implementada por encadeamento

Page 26: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PilhaDin.h

Page 27: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PilhaDin.c

Page 28: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Cria Pilha vazia

Page 29: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Topo

Inserção de um nodo em pilha encadeada

Topo

Pilha por encadeamento

• Novo nodo inserido sempre no topo da pilha

PtPilha PtPilha

Topo

Novo nodo

Page 30: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Inserção de um nodo em pilha encadeada

Page 31: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PtPilha

Topo

Desempilha um nodo de uma pilha encadeadaPilha por encadeamento

Topo

PtPilha

• Só pode ser removido o nodo do topo da pilha

Nodo a ser removido

Page 32: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Desempilha um nodo de uma pilha encadeada

Page 33: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Consulta à pilha encadeada Pilha por encadeamento

• Só pode ser acessado o nodo do topo da pilha

Topo

PtPilha Nodo que pode ser acessado

Page 34: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Consulta à pilha

Page 35: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

PtPilha = null

Topo

Topo

Topo

Topo

PtPilha

PtPilha

PtPilha

Destruição de uma pilha encadeada Pilha por encadeamento

• Liberar espaço ocupado pelos nodos, sempre a partir do topo da pilha

• No final: apontador para o endereço nulo

Page 36: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Destruir pilha

Page 37: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Verifica de pilha esta cheia

Verifica de pilha esta vazia

Page 38: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Exercício

Implemente o TAD Pilha utilizando alocação dinâmica de memória e acesso encadeado.

Teste o programa para reconhecer quais palavras são palíndromos em uma dada frase.

Page 39: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Aplicação da estrutura de dados Pilha em avaliação de expressões aritméticas

Forma das expressõesConsidere: Operandos: [0,...,9] Operadores:[+,-,/,x,^] Delimitadores: [(,)]Exemplos:2 + 3 * 5 = 17(2 + 3) * 5 = 25

As operações são efetuadas de acordo com a ordem de precedência dos operadores;

Os parênteses alteram a ordem natural deavaliação dos operadores.

Page 40: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Proponham um algoritmo para avaliar expressões aritméticas

22 – 56 / 2;( 22 – 56 ) / 2;40 / ( 2 x ( 3 – 1 ) + 6 );2 ^ 3 x 4;2 ^ ( 3 x 4 );

?

Page 41: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Notação Polonesa e Notação Polonesa Inversa

Notação Polonesa (pré-fixada)- Proposta por Jan lukasiewiscz em 1920

- permite escrever uma expressão aritmética em que a precedência é implícita – operador antes dos operandos:Notação infixa: (1-2)*(4+5)Notação pré-fixa: * - 1 2 + 4 5

Notação Polonesa Inversa (pós-fixada) - proposta por Charles Hamblin em 1950.– pós-fixa = operador após operandosNotação pós-fixa: 1 2 – 4 5 + *

Page 42: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Notação Polonesa e Notação Polonesa Inversa expressão:

---------- 2 + 5 x 3 2 + 3 – 42 + (3 – 4)(2 + 4)/(3 -1)(2+4)/(3-1)x42^2*3-4+1/2/(1+1)

forma pós-fixada

2 5 3 x + 2 3 + 4 - 2 3 4 - +2 4 + 3 1 - /2 4 + 3 1 – / 4 x2 2 ^ 3 * 4 – 1 2 / 1 1 + / +

forma pré-fixada

+ 2 x 5 3 - + 2 3 4+ 2 – 3 4/ + 2 4 -3 1x / +2 4-3 1 4 + -*^2 2 3 4 / / 1 2 + 1 1

Page 43: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Um possível algoritmo para avaliação de uma expressão pós-fixa

• cada operando é empilhado numa pilha de valores• quando se encontra um operador

– desempilha-se o número apropriado de operandos (dois para operadores binários e um para operadores unários)

– realiza-se a operação devida– empilha-se o resultado

• Exemplo:• avaliação da expressão 1 2 – 4 5 + *

Page 44: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura
Page 45: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Como transformar uma expressão na forma infixa para pos-fixa???

- Expressões entre parênteses devem ser convertidos de tal forma que possam ser tratadas como um único operando.

- Somente operadores são empilhados . Um operador é empilhado apenas se possui precedência maior que o operador no topo da pilha.

- Abre parênteses é sempre empilhado- Fecha parênteses nunca é empilhado (menor

precedência).Todos os operadores são desempilhados até encontrar um ‘(‘.

- Operandos e operadores desempilhados são colocados na expressão na forma pós-fixa

Page 46: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Exercício usando pilha 1) Escreva uma função que transforma uma

expressão da forma in-fixa para a forma pós-fixa.

2) Escreva uma função que avalie uma expressão na forma pós-fixa

3) Escreva um programa que entra com a expressão aritmética pela linha de comando e avalia a expressão.

Page 47: Pilhas e Filas - inf.ufg.brhebert/disc/aed1/AED1_09_Pilas.pdf · Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura

Exercício usando pilha – cont.

Os operandos são números reais (positivos e negativos);

Os operadores são: {+,-,x,/,^}Os delimitadores são: {(,)}

Ex: 3.4 x 5 + ( 2.1 – 12 ) (-23 + 24.3 / 2.1) ^ 3