Você está na página 1de 17

Humberto Rocha

Estrutura de Dados I
Aula 07:Pilhas

Slides originais dos professores Yuri Morais Bezerra,


Filipe Teixeira Marques e Sandra Puga
Pilhas
É uma lista linear em que todas as
operações de inserção e remoção são
feitas por um único extremo
denominado topo.

Cap. 10 - 2
Pilhas (Stack)
 Propriedades
 Dada uma pilha P=(E1,E2,E3,E4,…,En)
 E1 é o elemento base da pilha
 En é o elemento topo da pilha

A inserção de um elemento x torna-o o


último da lista linear

A retirada é sempre feita sobre o elemento


En

3
Pilhas (Stack)
 Estrutura do tipo LIFO - Last In First Out
 Último a entrar, primeiro a sair

 Exemplos:
 Uma rua sem saída e estreita, onde apenas um carro passa
por vez
 O último carro a entrar será o primeiro a sair
 Não podemos retirar qualquer carro
 Não podemos inserir um carro de tal forma que ele não seja o
último

 Uma pilha de pratos em um restaurante

4
Pilhas (Stack)
 Ilustração

Topo

Base

 Implementação: sequencial e encadeada


5
Pilha Sequencial
 O que precisaremos para implementar uma
pilha sequencial?
 Um vetor de elementos
 Uma variável para controlar o topo

 Representação
Pilha Sequencial

Precisamos
desclocar os
elementos na
inserção e
remoção?
Aplicações de pilhas

 Aplicações diretas
 Históricode páginas visitadas num navegador
 Sequência de desfazer em um editor de textos
 Cadeia de chamada de métodos num programa

 Aplicações indiretas
 Estrutura
de dados auxiliares para algoritmos
 Componentes de outras estruturas de dados
Aplicações de Pilhas
 Chamada de procedimentos e funções na execução
de um programa
public static void main(String[] a){
f1();
System.out.println(“main”);
}
public void f1() {
f2();
System.out.println(“f1”);
} public void f3() {
public void f2() { System.out.println(“f3”);
f3(); }
System.out.println(“f2”);
} 9
Pilha Sequencial / Encadeada

 Operações
 Criar uma pilha;
 Testar se a pilha está vazia;
 Testar se a pilha está cheia;
 Obter o elemento do topo (sem eliminar);
 Empilhar um novo elemento (push);
 Desempilhar o elemento do topo (pop).
 Exibir os elementos da pilha

10
Pilha Encadeada
 Implementação com nós ligados por meio
de referências
 As operações sob listas simplesmente
encadeadas poderão ser tomadas como
referência
 Como poderíamos adaptar uma lista
simplesmente encadeada para uma pilha?
 Preciso modificar radicalmente a forma de
programar de uma lista para uma pilha?
 Onde será o topo da pilha?
 No final?
 No início?
11
Pilhas - Implementação
Algoritmo Pilha
var
Tipo pilha_reg = registro
topo: inteiro
elemento: vetor[1..50] de inteiros
fim
pilha: pilha_reg
inicio
pilha.topo  0
Função vazia( ): lógica
início
Se (pilha.topo = 0) então
retorne .v.
senão
retorne .f.
fim-se
fim Cap. 10 - 12
fim
Pilhas - Implementação
Algoritmo Pilha
var
Tipo pilha_reg = registro
topo: inteiro
elemento: vetor[1..50] de Função cheia( ): lógica
inteiros início
fim Se (pilha.topo >= 50) então
retorne .v.
pilha: pilha_reg
senão
inicio retorne .f.
pilha.topo  0 fim-se
Função vazia( ): lógica fim
início
Se (pilha.topo = 0) então
retorne .v.
senão
retorne .f.
fim-se
fim Cap. 10 - 13
fim
Pilhas - Implementação
Algoritmo Pilha Procedimento empilhar( elem: inteiro)
var início
Tipo pilha_reg = registro
Se (cheia( ) = .f. ) então
topo: inteiro
elemento: vetor[1..50] de pilha.topo  pilha.topo + 1
inteiros pilha.elemento [topo]  elem
fim senão
pilha: pilha_reg
Mostre("Pilha Cheia!")
inicio
pilha.topo  0 fim-se
Função vazia( ): lógica
Função cheia( ): lógica
início
início
Se (pilha.topo = 0) então Se (pilha.topo >= 50) então
retorne .v. retorne .v.
senão senão
retorne .f. retorne .f.
fim-se fim-se
Cap. 10 - 14
fim
fim
Pilhas - Implementação

Função desempilhar( ): inteiro


var
valorDesempilhado:inteiro
início
Se (vazia ( ) = .v.) então
Mostre("Pilha vazia!")
valorDesempilhado  nulo
retorne(valorDesempilhado)
senão
valorDesempilhado  pilha.elemento[topo]
pilha.topo  pilha.topo - 1
retorne(valorDesempilhado)
fim-se

Cap. 10 - 15
Exercícios
1. Defina Pilhas e apresente suas principais características.
2. Pesquise um exemplo prático de situação onde poderiam
ser utilizadas Pilhas.
3. Descreva um algoritmo demonstrando a situação
pesquisada.
4. Descreva um procedimento em algoritmo para cada uma
das operações que podem ser trabalhadas com Pilhas.
Comente o algorimo linha a linha.
5. Diferencie Pilhas encadeadas e Pilhas sequenciais.

DESAFIO: Traduza os algoritmos apresentados nesta aula


para a linguagem Java. Crie uma pilha baseado no código
construído. Empilhe e desempilhe elementos de uma pilha.
Debugue seu código e observe se o comportamento está
realmente correto.
16
Referências
• SANDRA PUGA & GERSON RISSETTI. Lógica de
Programação e Estrutura de Dados. Prentice-Hall, 2004.

• PREISS, Bruno. Estruturas de Dados e Algoritmos:


Padrões de projetos orientados a objetos com Java.
Campus, 2001.

• VELOSO. P. Estrutura de dados. Campus, 1995.

• HOROWITZ, E. Fundamentos de Estruturas de Dados.


Campus, 1987.

17