Buscar

Pilhas: Estrutura de Dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Estrutura de Dados 
UNIP - Ciência da Computação e Sistemas de Informação 
 
 
 
 
AULA 5 
Pilhas 
Estrutura de Dados 
 
A Estrutura de Dados Pilha 
• Pilha é uma estrutura de dados usada em programação, que 
tem uma regra para o acesso aos dados: o acesso dá-se por 
um único extremo, chamado topo. 
 
• Dizemos que uma pilha é uma estrutura LIFO (Last In, First 
Out), ou seja, o último elemento inserido é o primeiro 
elemento a ser consultado ou removido. 
 
• Vamos analisar o comportamento de uma pilha olhando o 
exemplo a seguir. 
 
A Estrutura de Dados Pilha 
• Vamos supor uma pilha de números inteiros 
8 
7 
6 
5 
4 
3 
2 
1 
0 
Topo = -1 
A Estrutura de Dados Pilha 
• Vamos supor uma pilha de números inteiros 
8 
7 
6 
5 
4 
3 
2 
1 
0 
Topo = -1 
8 
7 
6 
5 
4 
3 
2 
1 
5 0 
Insere 5 
Topo = 0 
A Estrutura de Dados Pilha 
• Vamos supor uma pilha de números inteiros 
8 
7 
6 
5 
4 
3 
2 
1 
0 
Topo = -1 
8 
7 
6 
5 
4 
3 
2 
1 
5 0 
Insere 5 
Topo = 0 
8 
7 
6 
5 
4 
3 
2 
23 1 
5 0 
Topo = 1 
Insere 23 
A Estrutura de Dados Pilha 
• Vamos supor uma pilha de números inteiros 
8 
7 
6 
5 
4 
3 
2 
1 
0 
Topo = -1 
8 
7 
6 
5 
4 
3 
2 
1 
5 0 
Insere 5 
Topo = 0 
8 
7 
6 
5 
4 
3 
2 
23 1 
5 0 
Topo = 1 
8 
7 
6 
5 
4 
3 
2 
1 
5 0 
Topo = 0 
Insere 23 Remove 
A Estrutura de Dados Pilha 
• Vamos supor uma pilha de números inteiros 
8 
7 
6 
5 
4 
3 
2 
1 
0 
Topo = -1 
8 
7 
6 
5 
4 
3 
2 
1 
5 0 
Insere 5 
Topo = 0 
8 
7 
6 
5 
4 
3 
2 
23 1 
5 0 
Topo = 1 
8 
7 
6 
5 
4 
3 
2 
1 
5 0 
Topo = 0 
8 
7 
6 
5 
4 
3 
2 
15 1 
5 0 
Topo = 1 
Insere 23 Remove Insere 15 
Operações em uma Pilha 
• As operações de inserção e remoção em uma pilha são 
comumente designadas empilhar e desempilhar 
• Além das operações de empilhar e desempilhar, uma pilha 
suporta também outras operações: 
• empilhar – insere um elemento na pilha; 
• desempilhar – remove um elemento da pilha; 
• pilha vazia – verifica se a pilha está vazia; 
• pilha cheia – verifica se a pilha está cheia; 
• elemento do topo – devolve o elemento que está no topo da pilha, sem 
retirá-lo da pilha; 
 
• Iremos estudar uma pilha implementada através de um vetor. 
Operação pilhaVazia 
• pilhaVazia é um módulo função sem parâmetros da operação pilha vazia. 
Esse módulo retorna verdadeiro se a pilha estiver vazia e retorna falso se 
a pilha não estiver vazia. 
 
lógico pilhaVazia( ) 
início_módulo 
se (topo = - 1) 
então 
retornar verdadeiro; 
senão 
retornar falso; 
fimse; 
fim_módulo; 
Operação pilhaCheia 
• pilhaCheia é um módulo função sem parâmetros da operação pilha cheia 
que retorna verdadeiro se a pilha estiver cheia, ou falso se a pilha estiver 
vazia. 
 
lógico pilhaCheia( ) 
início_módulo 
se (topo >= tamanho - 1) 
então 
retornar verdadeiro; 
senão 
retornar falso; 
fimse; 
fim_módulo; 
 
Operação empilhar 
• empilhar é um módulo procedimento da operação empilhar que recebe 
como parâmetro um objeto elemento a ser empilhado. 
 
empilhar (Objeto elemento) 
início_módulo 
se (não pilhaCheia( )) 
então 
topo  topo + 1; 
vetor[topo]  elemento; 
senão 
escrever ("Pilha Cheia"); 
fimse; 
fim_módulo; 
 
Operação desempilhar 
• desempilhar é um módulo função sem parâmetros da operação 
desempilhar. Se a pilha não estiver vazia, o elemento do topo é 
desempilhado e retornado 
 
objeto desempilhar () 
início_módulo 
Declarar 
objeto desempilhado  nulo; 
se (pilhaVazia()) 
então 
escrever ("Pilha Vazia"); 
senão 
Desempilhado vetor[topo]; 
Topo  topo - 1; 
fimse; 
retornar desempilhado; 
fim_módulo; 
 
 
Operação elementoTopo 
• elementoTopo é um módulo função da operação elemento do topo que 
devolve o elemento que está no topo da pilha. 
 
Objeto elementoTopo( ) 
início_módulo 
 se (pilhaVazia()) 
 então 
 escrever(“PilhaVazia”); 
 senão 
 retornar vetor[topo]; 
fimse; 
fim_módulo; 
 
 
 
método pilhaVazia em Java 
public boolean pilhaVazia( ){ 
if (topo == -1){ 
return true; 
} else { 
return false; 
} 
} 
método pilhaCheia em Java 
public boolean pilhaCheia( ){ 
if (topo >= tamanho-1){ 
return true; 
} else { 
return false; 
} 
} 
 
método empilhar em Java 
public void empilhar (Object elemento){ 
if (! pilhaCheia( )){ 
topo = topo + 1; 
vetor[topo] = elemento; 
} else { 
System.out.printf ("Pilha Cheia"); 
} 
} 
public void empilhar (Object elemento)throws PilhaCheiaException{ 
if (! pilhaCheia( )){ 
topo = topo + 1; 
vetor[topo] = elemento; 
} else { 
throw new PilhaCheiaException(); 
} 
} 
 
 
método desempilhar em Java 
public Object desempilhar (){ 
Object desempilhado = null; 
if (pilhaVazia()){ 
System.out.printf ("Pilha Vazia"); 
} else { 
desempilhado = vetor[topo]; 
topo = topo - 1; 
} 
return desempilhado; 
} 
 
 
método elementoTopo 
public Objeto elementoTopo( ){ 
 return vetor[topo]; 
} 
 
 
Pilha em Java 
• Pilha implementada em Java, como uma classe 
import javax.swing.*; 
public class Pilha{ 
private int tamanho; 
private int topo; 
private Object vetor [ ]; 
 
public Pilha (int tam){ 
topo = -1; 
tamanho = tam; 
vetor = new Object[tam]; 
} 
public Objeto elementoTopo( ){ 
 return vetor[topo]; 
} 
 
Pilha em Java 
public boolean pilhaVazia( ){ 
if (topo == -1){ 
return true; 
} else { 
return false; 
} 
} 
public boolean pilhaCheia( ){ 
if (topo >= tamanho-1){ 
return true; 
} else { 
return false; 
} 
} 
 
Pilha em Java 
public void empilhar (Object elemento){ 
if (! pilhaCheia( )){ 
topo = topo + 1; 
vetor[topo] = elemento; 
} else { 
System.out.printf ("Pilha Cheia"); 
} 
} 
public Object desempilhar (){ 
Object desempilhado = null; 
if (pilhaVazia()){ 
System.out.printf("Pilha Vazia"); 
} else { 
desempilhado = vetor[topo]; 
topo = topo - 1; 
} 
return desempilhado; 
} 
} 
 
Pilha em Java 
Exemplo: imprimir 5 números na ordem inversa em que foram lidos. 
 
 
public class TestaPilha2{ 
 
public static void main (String arg []){ 
 
 PilhaObj objPilha = new PilhaObj (5); 
 Modulos m = new Modulos (); 
 Object num, numInt; 
 
 for (int i = 0 ; i < 5 ; i++){ 
 m.txtInteiro(); 
 num = m.lerNumInt(); 
 objPilha.empilhar(num); 
 } 
 
 while (!objPilha.pilhaVazia()){ 
 numInt = objPilha.desempilhar(); 
 System.out.printf("%nMostra Ordem Inversa: %s",numInt); 
 } 
 System.exit(0); 
}//fim main 
}//fim classe 
 
Exercícios 
• Exercício: desenhe a representação da pilha para a seguinte 
seqüência de operações, considerando que a pilha está 
inicialmente vazia: 
a. ElementoTopo ( ); 
b. Empilhar (3); 
c. Empilhar (7); 
d. Desempilhar( ); 
e. Empilhar (25); 
f. Empilhar (18); 
g. Desempilhar ( ); 
h. ElementoTopo ( ); 
i. Desempilhar ( ); 
j. MostrarPilha ( ); 
k. Desempilhar ( ); 
Exercícios 
• Exercício: Faça uma função que recebe um vetor de String 
representando uma expressãoaritmética (cada elemento do 
vetor é um item da expressão), e avalia se os parênteses da 
expressão estão corretos. 
 
 
• Por exemplo: 
• (( 2 + 3 ) * ( 4 / 2 ))  correta 
• (( 2 + 3 ) * 4 / 2 ))  errada 
• ) 2 + 3 ( * (4 / 2 )  errada

Continue navegando

Outros materiais