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 JavaQuantidade 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. 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 JFrameQuantidade 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 |
JavaScript - Como retornar o índice da primeira ocorrência de um elemento em um array do JavaScript usando a função indexOf() |
Códigos Fonte |
Software 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 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 |