Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Pilhas

Escreva um programa Java para implementar uma classe Pilha usando uma lista ligada. Sua classe deverá oferecer as funções para empilhar, desempilhar - Exercícios Resolvidos de Java

Quantidade de visualizações: 472 vezes
Pergunta/Tarefa:

Escreva um programa Java para implementar uma classe Pilha usando uma lista ligada. Sua classe deverá oferecer as funções para empilhar, desempilhar, exibir os nós da pilha e verificar se a pilha está vazia. Na classe principal do seu programa Java você deverá fornecer um menu de opções para gerenciar a pilha. Uma sugestão é usar a estrutura switch() para criar o menu.

Atenção: Sua solução deverá, obrigatoriamente, usar uma lista encadeada como implementação da pilha. Não é permitido usar arrays nem ArrayList.

Sua saída deve ser parecida com:

------------------------------
        PILHA EM JAVA
------------------------------
1. Empilhar
2. Desempilhar
3. Exibir Pilha
4. Sair
Sua opção: 1

Informe o valor a ser empilhado: 35

Valor empilhado com sucesso.
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java:

Código para a classe Nó (No.java):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

// definição da classe No
public class No {
  int valor; // valor do nó
  No proximo; // aponta para o próximo nó
}

Código para a classe Pilha (Pilha.java):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

public class Pilha {
  No topo; // aponta para o topo da pilha

  // construtor da classe
  public Pilha() {
    this.topo = null; // pilha vazia
  }
  
  // metodo que permite verificar se a pilha está vazia
  public boolean isVazia(){
    return this.topo == null;
  }
  
  // método que permite empilhar um novo valor na pilha
  public void empilhar(int v){
    // criamos um novo nó
    No novo_no = new No();
    // definimos o valor do nó    
    novo_no.valor = v;
    // apontamos para o nó que estava no topo
    novo_no.proximo = this.topo;
    // e a variável topo agora aponta para o novo nó
    this.topo = novo_no;
  }
  
  // método que permite desempilhar um nó da pilha
  public No desempilhar(){
    // nó a ser retornado
    No removido = null;
    
    // a pilha não está vazia, né?
    if (this.topo != null) {
      // apontamos para o topo da pilha
      No temp = this.topo;
      // agora o topo aponta para o seu próximo
      this.topo = this.topo.proximo;
      // guardamos o valor para retornar no nó removido
      removido = new No();
      removido.valor = temp.valor;
      // e marcamos o nó temp para remoção
      temp = null;
    }
    
    // retorna o nó desempilhado
    return removido;
  }
  
  // método que permite exibir todos os nós da pilha
  public void exibirNos(){
    // vamos apontar para o topo da pilha
    No temp = this.topo;
    
    // enquanto temp for diferente de null
    while (temp != null) {
      System.out.println(temp.valor);
      // pulamos para o próximo nó
      temp = temp.proximo;
    }
  }
}

E agora o código para a classe principal, que contém um menu de opções para gerenciar a pilha (Estudos.java):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    // para ler a entrada do usuário
    Scanner entrada = new Scanner(System.in);
    
    // vamos criar uma nova pilha
    Pilha pilha = new Pilha();
    
    // menu de opções para a pilha
    while(true){
      System.out.println("\n------------------------------");
      System.out.println("        PILHA EM JAVA");
      System.out.println("------------------------------");
      System.out.println("1. Empilhar");
      System.out.println("2. Desempilhar");
      System.out.println("3. Exibir Pilha");
      System.out.println("4. Sair");
      System.out.print("Sua opção: ");
      int opcao = Integer.parseInt(entrada.nextLine());
      
      switch(opcao){
        case 1: // vamos empilhar um novo valor na pilha
          System.out.print("\nInforme o valor a ser empilhado: ");
          int valor = Integer.parseInt(entrada.nextLine());
          pilha.empilhar(valor);
          System.out.println("\nValor empilhado com sucesso.");
          break;
        
        case 2: // vamos desempilhar um valor da pilha
          No desempilhado = pilha.desempilhar();
          if(desempilhado == null){
            System.out.println("\nPilha vazia.");
          }
          else{
            System.out.println("\nO valor desempilhado foi: " +
              desempilhado.valor);
          }
          break;
          
        case 3: // vamos mostrar o conteúdo da pilha
          if(pilha.isVazia()){
            System.out.println("\nA pilha está vazia.");
          }
          else{
            System.out.println("\nElementos na pilha:\n");
            pilha.exibirNos();
          }
          break;
          
        default:
          System.out.println("\nOpção inválida.");
          break;
      }
    }
  }
}


Link para compartilhar na Internet ou com seus amigos:

Java ::: Dicas & Truques ::: Formulários e Janelas

Java Swing para iniciantes - Como definir ou obter o título de uma janela JFrame

Quantidade de visualizações: 11013 vezes
Nesta dica mostrarei como usar o método setTitle() da classe JFrame para definir o título da janela JFrame. Usaremos também o método getTitle() para obter o título da janela.

Veja o código Java Swing completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

import javax.swing.*;
 
public class Estudos extends JFrame{
  public Estudos() {
    setSize(350, 250);
    setVisible(true);
 
    // Define o título da janela    
    setTitle("Controle de Estoque");
 
    // obtém o título da janela
    JOptionPane.showMessageDialog(null, 
      "O título da janela é: " + this.getTitle());
  }
   
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Ao executar este exemplo você verá uma janela JOptionPane com o texto "O título da janela é: Controle de Estoque".


Java ::: Estruturas de Dados ::: Lista Ligada Simples

Estruturas de dados em Java - Como criar uma lista singularmente ligada, inserindo e exibindo os valores contidos em cada nó

Quantidade de visualizações: 11970 vezes
Em dicas posteriores você aprendeu sobre listas singularmente e duplamente ligadas. Nesta dica você aprenderá a criar uma lista singularmente ligada (com referências apenas para o próximo nó), inserir alguns nós (sempre no final da lista) e usará um laço while para visitar todos os nós e exibir seus valores.

A classe usada para representar cada nó é a seguinte (No.java):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// classe No
public class No{
  public int valor;
  public No proximo;
}
// fim da classe No

Note que cada nó contém apenas um valor inteiro e uma referência para o próximo nó. Ao analisar o código você perceberá que tanto a inserção quanto a exibição dos nós são feitas usando métodos. Isso permitirá o reaproveitamento deste código em suas próprias implementações. Veja o código para a lista ligada (Lista.java):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Lista{
  No inicio; // início da lista  

  // função que permite exibir os valores de
  // todos os nós da lista
  public void exibir(){
    if(inicio != null){
      do{
        System.out.println(inicio.valor);
        inicio = inicio.proximo;
      }while(inicio != null);
    }
    else
      System.out.println("A lista esta vazia\n\n");
  }

  // função que permite inserir nós na lista.
  // veja que a função recebe o valor a ser
  // armazenado em cada nó
  public void inserir(int v){
    No temp;

    // verifica se a lista está vazia
    if(inicio == null){
      // reserva memória para o novo nó
      inicio = new No();
      inicio.valor = v;
      // é o primeiro nó...não deve apontar para
      // lugar nenhum
      inicio.proximo = null;
    }
    else{ // não está vazia....vamos inserir o nó no final
      temp = inicio;
      // vamos varrer a lista até encontrar o último nó
      while(temp.proximo != null)
        temp = temp.proximo;

      // estamos no último nó...vamos criar um novo nó agora
      temp.proximo = new No();
      // atribui o valor do nó
      temp.proximo.valor = v;
      // define o campo proximo do nó como null
      temp.proximo.proximo = null;
    }
  }
}

Compile as classes No.java e Lista.java e vamos fazer o teste (TesteJava.java):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class TesteLista{
  public static void main(String args[]){
    // vamos criar uma nova lista
    Lista lista = new Lista();

    // vamos inserir quatro valores na lista
    lista.inserir(45);
    lista.inserir(3);
    lista.inserir(98);
    lista.inserir(17);

    // exibe os valores na lista
    lista.exibir();

    System.exit(0);   
  }  
}



Java ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca)

Java Insertion Sort - Como ordenar um vetor de inteiros usando a ordenação Insertion Sort (Ordenação por Inserção)

Quantidade de visualizações: 4553 vezes
A ordenação Insertion Sort, Insertion-Sort, ou Ordenação por Inserção, possui uma complexidade de tempo de execução igual à ordenação Bubble Sort (Ordenação da Bolha), ou seja, O(n2). Embora mais rápido que o Bubble Sort, e ser um algorítmo de ordenação quadrática, a ordenação Insertion Sort é bastante eficiente para problemas com pequenas entradas, sendo o mais eficiente entre os algoritmos desta ordem de classificação, porém, nunca recomendada para um grande conjunto de dados.

A forma mais comum para o entendimento da ordenação Insertion Sort é compará-la com a forma pela qual algumas pessoas organizam um baralho num jogo de cartas. Imagine que você está jogando cartas. Você está com as cartas na mão e elas estão ordenadas. Você recebe uma nova carta e deve colocá-la na posição correta da sua mão de cartas, de forma que as cartas obedeçam à ordenação.

A cada nova carta adicionada à sua mão de cartas, a nova carta pode ser menor que algumas das cartas que você já tem na mão ou maior, e assim, você começa a comparar a nova carta com todas as cartas na sua mão até encontrar sua posição correta. Você insere a nova carta na posição correta, e, novamente, a sua mão é composta de cartas totalmente ordenadas. Então, você recebe outra carta e repete o mesmo procedimento. Então outra carta, e outra, e assim por diante, até não receber mais cartas.

Esta é a ideia por trás da ordenação por inserção. Percorra as posições do vetor (array), começando com o índice 1 (um). Cada nova posição é como a nova carta que você recebeu, e você precisa inseri-la no lugar correto no sub-vetor ordenado à esquerda daquela posição.

Vamos ver a implementação na linguagem Java agora? Observe o seguinte código, no qual temos um vetor de inteiros com os elementos {4, 6, 2, 8, 1, 9, 3, 0, 11}:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package arquivodecodigos;
 
public class Estudos{
  // método que permite ordenar o vetor de inteiros
  // usando a ordenação Insertion Sort
  public static void insertionSort(int[] vetor){
    // percorre todos os elementos do vetor começando
    // pelo segundo elemento
    for(int i = 1; i < vetor.length; i++){
      int atual = vetor[i]; // o valor atual a ser inserido
      // começa a comparar com a célula à esquerda de i
      int j = i - 1;
      
      // enquanto vetor[j] estiver fora de ordem em relação
      // a atual
      while((j >= 0) && (vetor[j] > atual)){
        // movemos vetor[j] para a direita e decrementamos j
        vetor[j + 1] = vetor[j];
        j--;
      }
      
      // colocamos atual em seu devido lugar
      vetor[j + 1] = atual;
    }
  }  
    
  public static void main(String args[]){
    // vamos criar um vetor com 9 elementos
    int valores[] = {4, 6, 2, 8, 1, 9, 3, 0, 11};
    
    // exibimos o vetor na ordem original
    System.out.println("Ordem original:\n");
    for(int i = 0; i < valores.length; i++){
      System.out.print(valores[i] + "  ");  
    }
    
    // vamos ordenar o vetor agora
    insertionSort(valores);
    
    // exibimos o vetor ordenado
    System.out.println("\n\nOrdenado:\n");
    for(int i = 0; i < valores.length; i++){
      System.out.print(valores[i] + "  ");  
    }
  }
}

Ao executar este código Java nós teremos o seguinte resultado:

Sem ordenação:

4 6 2 8 1 9 3 0 11

Ordenada usando Insertion Sort:

0 1 2 3 4 6 8 9 11


Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 83 usuários muito felizes estudando em nosso site.