SlideShare uma empresa Scribd logo
Prof. Adriano Teixeira de Souza
   É uma das estruturas de dados mais simples

   A idéia fundamental da pilha é que todo o acesso a
    seus elementos é feito através do seu topo.

   Assim, quando um elemento novo é introduzido na
    pilha, passa a ser o elemento do topo, e o único
    elemento que pode ser removido da pilha é o do
    topo.
   Verificação de parênteses.


   Retirada de vagões de um trem.


   Retirada de mercadorias em um caminhão de
    entregas.
   Os elementos da pilha são retirados na ordem
    inversa à ordem em que foram introduzidos:
    o primeiro que sai é o último que entrou
    (LIFO – last in, first out).
   Existem duas operações básicas que devem
    ser implementadas numa estrutura de pilha:
    ◦ operação para empilhar (push) um novo elemento,
      inserindo-o no topo,
    ◦ operação para desempilhar (pop) um elemento,
      removendo-o do topo
push(b)
push(a)


  b

  a




          topo
                 x

                 m

                 k
topo
                                     b
               topo
                      a              a
topo
       x              x              x

       m              m              m

       k   push(a)    k   push(b)    k
pop(b)
pop(a)




         topo
                b

                a

                x

                m

                k
topo
       b

       a       topo
                      a
                              topo
       x              x              x

       m              m              m

       k   pop(b)     k   pop(a)     k
   Supondo a pilha está armazenada em um
    vetor pilha[0..n-1].
   A parte do vetor ocupada pela pilha será:




      0                      t           n-1


                  pilha[0..n-1]
public class Pilha {

 static final int MAX = 50;

 int n;//Elementos adicionados
 float vet[] = new float[MAX];

} Pilha;
Pilha cria()
{
   Pilha p;
   p = new Pilha();
   p.n = 0;/*Inicializa com zero elementos*/
   return p;
}




                      Prof. Adriano Teixeira de Souza
void push(Pilha p, float v)
{
  if(p.n == Pilha.MAX){
    System.out.println("Capacidade da pilha
                        estourou.");
    System.exit(1); /*aborta programa*/
  }
  /* insere elemento na próxima posição livre */
  p.vet[p.n] = v;
  p.n++;
}
float pop(Pilha p)
{
  float v;
  if (vazia(p)) {
    System.out.println("Pilha vazia.");
    System.exit(1); /*aborta programa*/
  }
  /*retira elemento do topo*/
  v = p.vet[p.n-1];
  p.n--;
  return v;
}
boolean vazia(Pilha p)
{
  return (p.n == 0);
}
void imprime (Pilha p) {

    int i;

    for (i=p.n-1; i>=0; i--)
      System.out.println(p.vet[i]);

}




                     Prof. Adriano Teixeira de Souza
public static void main(String[] args) {
  ManipuladorPilha maninula = new ManipuladorPilha();

    Pilha p = maninula.cria();
    maninula.push(p,20.0f);
    maninula.push(p,20.8f);
    maninula.push(p,20.3f);
    maninula.push(p,44.5f);
    maninula.push(p,33.3f);
    maninula.push(p,20.9f);
    maninula.imprime (p);
    System.out.println("Retirado: "+ maninula.pop(p));
    System.out.println("Retirado: "+maninula.pop(p));
    System.out.println("Configuracao da fila:");
                       maninula.imprime (p);
    p = null;
}

                            Prof. Adriano Teixeira de Souza
   Quando o número máximo de elementos que
    serão armazenados na pilha não é conhecido,
    devemos implementar a pilha usando uma
    estrutura de dados dinâmica, no caso,
    empregando uma lista encadeada.
   Os elementos são armazenados na lista e a
    pilha pode ser representada simplesmente por
    um ponteiro para o primeiro nó da lista.
public class No {

    float info;
    No   anterior;
}

public class Pilha {
  No topo;
}
   Criar uma estrutura de pilha;
   Inserir um elemento no topo (push);
   Remover o elemento do topo (pop);
   Verificar se a pilha está vazia;
   Liberar a estrutura de pilha
Pilha cria()
{
  Pilha p = new Pilha();
  p.topo = null;
  return p;
}
void push(Pilha p, float v)
{
  No aux = new No();
  aux.info = v;
  aux.anterior = p.topo;
  p.topo = aux;
}
float pop(Pilha p)
{
  float v;
  if (vazia(p))
  {
    System.out.println("Pilha vazia.");
    System.exit(1); /*aborta o programa*/
  }
  v    = p.topo.info;
  No aux = p.topo;
  p.topo = aux.anterior;
  return v;
}
boolean vazia(Pilha p)
{
  return (p.topo == null);
}
void imprime (Pilha p) {

    for (No q=p.topo; q!=null; q=q.anterior)
      System.out.println(q.info);

}




                      Prof. Adriano Teixeira de Souza
public static void main(String[] args) {
  ManipulaPilha manipula = new ManipulaPilha();
  Pilha p = manipula.cria();
  manipula.push(p,20.0f);
  manipula.push(p,20.8f);
  manipula.push(p,20.3f);
  manipula.push(p,44.5f);
  manipula.push(p,33.3f);
  manipula.push(p,20.9f);
  manipula.imprime (p);
  System.out.println("Retirado: "+ manipula.pop(p));
  System.out.println("Retirado: "+ manipula.pop(p));
  System.out.println("Configuracao da fila:n");
  manipula.imprime (p);
  p = null;
}



                         Prof. Adriano Teixeira de Souza
   Utilizando o algoritmo anteriormente
    apresentado implemente um programa que
    insira dados em uma pilha A e em seguida
    remova-os elementos da pilha A e insira-os
    na pilha B com sua ordem invertida.




                        Prof. Adriano Teixeira de Souza

Mais conteúdo relacionado

PPTX
Estrutura de dados em Java - Filas
PPTX
Estrutura de dados em Java - Filas com lista encadeada
PDF
Pilha e filas
PPTX
Estrutura de dados em Java - Filas
PDF
Estrutura de dados - Pilhas
PDF
Estrutura de Dados - Listas Encadeadas
PDF
Estrutura de dados - Filas
PDF
Estrutura de dados - Implementação de filas com listas
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas com lista encadeada
Pilha e filas
Estrutura de dados em Java - Filas
Estrutura de dados - Pilhas
Estrutura de Dados - Listas Encadeadas
Estrutura de dados - Filas
Estrutura de dados - Implementação de filas com listas

Mais procurados (20)

PPT
Pilhas e Filas
PPTX
Estrutura de Dados em Java (Funções e Procedimentos)
PPTX
Stack of Data structure
PDF
Estrutura de Dados - PILHAS
PDF
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
PPTX
Estrutura de Dados - Conceitos fundamentais
PDF
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
PPTX
Tabela Hash
PPTX
Linked lists a
PPT
Pilhas e Filas.ppt
PPTX
Algoritmos de ordenação
PPTX
My lectures circular queue
PDF
Estrutura de Dados - Registros
PDF
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
PDF
Introdução a estruturas de dados em python
PPTX
Estrutura de dados em Java - Ponteiros e Alocação de Memória
PPTX
Queues in C++
PPTX
Linguagem C - Vetores, Matrizes e Funções
PDF
Lista duplamente encadeada em python
PPTX
Estrutura de dados em Java - Árvores Binárias
Pilhas e Filas
Estrutura de Dados em Java (Funções e Procedimentos)
Stack of Data structure
Estrutura de Dados - PILHAS
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Conceitos fundamentais
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Tabela Hash
Linked lists a
Pilhas e Filas.ppt
Algoritmos de ordenação
My lectures circular queue
Estrutura de Dados - Registros
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Introdução a estruturas de dados em python
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Queues in C++
Linguagem C - Vetores, Matrizes e Funções
Lista duplamente encadeada em python
Estrutura de dados em Java - Árvores Binárias
Anúncio

Destaque (16)

PPTX
Estrutura de Dados em Java (Introdução)
PDF
Pilha e Fila Estática
PPTX
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
PPTX
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
PDF
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
PDF
Estrutura de Dados - Aula 01 - Apresentação
PDF
Estruturas de dados
PPTX
JAVA - Matrizes
PPTX
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
PDF
Pilha e Fila Dinamica
PPTX
Estrutura de dados em Java - Recursividade
PDF
Estrutura de dados - Árvores Binárias
PPTX
Curso Java Básico - Aula 05
PDF
Java orientação a objetos (introdução)
PDF
Apostila estrutura de dados 2
Estrutura de Dados em Java (Introdução)
Pilha e Fila Estática
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Estrutura de Dados - Aula 01 - Apresentação
Estruturas de dados
JAVA - Matrizes
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Pilha e Fila Dinamica
Estrutura de dados em Java - Recursividade
Estrutura de dados - Árvores Binárias
Curso Java Básico - Aula 05
Java orientação a objetos (introdução)
Apostila estrutura de dados 2
Anúncio

Semelhante a Estrutura de dados em Java - Pilhas (11)

PPTX
PPTX
Pilhas e Filas estrutura de dados 01.pptx
PDF
Pilhas encadeadas
PPTX
Aula 10
PPTX
Programação-Aula004
PPTX
PPTX
PPTX
PDF
Pilhas java
PDF
aula de cálculo pdf atualizado 2023 funções
PDF
Aula actionscript basico
Pilhas e Filas estrutura de dados 01.pptx
Pilhas encadeadas
Aula 10
Programação-Aula004
Pilhas java
aula de cálculo pdf atualizado 2023 funções
Aula actionscript basico

Mais de Adriano Teixeira de Souza (17)

PPTX
Responsive web design
PPTX
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
PPTX
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
PDF
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
PDF
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
PDF
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
PDF
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
PDF
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
PDF
Paradigmas de Linguagens de Programação - Tratamento de Exceções
PDF
Paradigmas de Linguagens de Programação - Estruturas de Controle
PDF
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
PDF
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
PDF
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
PDF
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
PDF
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
PDF
Paradigmas de Linguagens de Programação - Classificações
PDF
Estrutura de dados - Introdução a linguagem C
Responsive web design
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Classificações
Estrutura de dados - Introdução a linguagem C

Último (11)

PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Design - Introdução a Gestalt e teoria das formas
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Utilizando code blockes por andre backes
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Tipos de servidor em redes de computador.pptx
PDF
Manejo integrado de pragas na cultura do algodão
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Design - Introdução a Gestalt e teoria das formas
Eng. Software - pontos essenciais para o início
Arquitetura de computadores - Memórias Secundárias
Utilizando code blockes por andre backes
Viasol Energia Solar -Soluções para geração e economia de energia
Tipos de servidor em redes de computador.pptx
Manejo integrado de pragas na cultura do algodão
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...

Estrutura de dados em Java - Pilhas

  • 2. É uma das estruturas de dados mais simples  A idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo.  Assim, quando um elemento novo é introduzido na pilha, passa a ser o elemento do topo, e o único elemento que pode ser removido da pilha é o do topo.
  • 3. Verificação de parênteses.  Retirada de vagões de um trem.  Retirada de mercadorias em um caminhão de entregas.
  • 4. Os elementos da pilha são retirados na ordem inversa à ordem em que foram introduzidos: o primeiro que sai é o último que entrou (LIFO – last in, first out).  Existem duas operações básicas que devem ser implementadas numa estrutura de pilha: ◦ operação para empilhar (push) um novo elemento, inserindo-o no topo, ◦ operação para desempilhar (pop) um elemento, removendo-o do topo
  • 5. push(b) push(a) b a topo x m k
  • 6. topo b topo a a topo x x x m m m k push(a) k push(b) k
  • 7. pop(b) pop(a) topo b a x m k
  • 8. topo b a topo a topo x x x m m m k pop(b) k pop(a) k
  • 9. Supondo a pilha está armazenada em um vetor pilha[0..n-1].  A parte do vetor ocupada pela pilha será: 0 t n-1 pilha[0..n-1]
  • 10. public class Pilha { static final int MAX = 50; int n;//Elementos adicionados float vet[] = new float[MAX]; } Pilha;
  • 11. Pilha cria() { Pilha p; p = new Pilha(); p.n = 0;/*Inicializa com zero elementos*/ return p; } Prof. Adriano Teixeira de Souza
  • 12. void push(Pilha p, float v) { if(p.n == Pilha.MAX){ System.out.println("Capacidade da pilha estourou."); System.exit(1); /*aborta programa*/ } /* insere elemento na próxima posição livre */ p.vet[p.n] = v; p.n++; }
  • 13. float pop(Pilha p) { float v; if (vazia(p)) { System.out.println("Pilha vazia."); System.exit(1); /*aborta programa*/ } /*retira elemento do topo*/ v = p.vet[p.n-1]; p.n--; return v; }
  • 14. boolean vazia(Pilha p) { return (p.n == 0); }
  • 15. void imprime (Pilha p) { int i; for (i=p.n-1; i>=0; i--) System.out.println(p.vet[i]); } Prof. Adriano Teixeira de Souza
  • 16. public static void main(String[] args) { ManipuladorPilha maninula = new ManipuladorPilha(); Pilha p = maninula.cria(); maninula.push(p,20.0f); maninula.push(p,20.8f); maninula.push(p,20.3f); maninula.push(p,44.5f); maninula.push(p,33.3f); maninula.push(p,20.9f); maninula.imprime (p); System.out.println("Retirado: "+ maninula.pop(p)); System.out.println("Retirado: "+maninula.pop(p)); System.out.println("Configuracao da fila:"); maninula.imprime (p); p = null; } Prof. Adriano Teixeira de Souza
  • 17. Quando o número máximo de elementos que serão armazenados na pilha não é conhecido, devemos implementar a pilha usando uma estrutura de dados dinâmica, no caso, empregando uma lista encadeada.  Os elementos são armazenados na lista e a pilha pode ser representada simplesmente por um ponteiro para o primeiro nó da lista.
  • 18. public class No { float info; No anterior; } public class Pilha { No topo; }
  • 19. Criar uma estrutura de pilha;  Inserir um elemento no topo (push);  Remover o elemento do topo (pop);  Verificar se a pilha está vazia;  Liberar a estrutura de pilha
  • 20. Pilha cria() { Pilha p = new Pilha(); p.topo = null; return p; }
  • 21. void push(Pilha p, float v) { No aux = new No(); aux.info = v; aux.anterior = p.topo; p.topo = aux; }
  • 22. float pop(Pilha p) { float v; if (vazia(p)) { System.out.println("Pilha vazia."); System.exit(1); /*aborta o programa*/ } v = p.topo.info; No aux = p.topo; p.topo = aux.anterior; return v; }
  • 23. boolean vazia(Pilha p) { return (p.topo == null); }
  • 24. void imprime (Pilha p) { for (No q=p.topo; q!=null; q=q.anterior) System.out.println(q.info); } Prof. Adriano Teixeira de Souza
  • 25. public static void main(String[] args) { ManipulaPilha manipula = new ManipulaPilha(); Pilha p = manipula.cria(); manipula.push(p,20.0f); manipula.push(p,20.8f); manipula.push(p,20.3f); manipula.push(p,44.5f); manipula.push(p,33.3f); manipula.push(p,20.9f); manipula.imprime (p); System.out.println("Retirado: "+ manipula.pop(p)); System.out.println("Retirado: "+ manipula.pop(p)); System.out.println("Configuracao da fila:n"); manipula.imprime (p); p = null; } Prof. Adriano Teixeira de Souza
  • 26. Utilizando o algoritmo anteriormente apresentado implemente um programa que insira dados em uma pilha A e em seguida remova-os elementos da pilha A e insira-os na pilha B com sua ordem invertida. Prof. Adriano Teixeira de Souza