Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Listas Ligadas |
|
Como inserir um nó em qualquer posição de uma lista ligada em Java - Escreva um programa Java que cria uma lista dinamicamente encadeada - Desafio de Programação Resolvido em JavaQuantidade de visualizações: 569 vezes |
|
Pergunta/Tarefa: Escreva um programa Java que cria uma lista dinamicamente encadeada (lista singularmente encadeada) e pede para o usuário inserir 5 elementos do tipo inteiro. Em seguida peça para o usuário informar um índice e um novo elemento e insira tal elemento no índice informado. Faça a validação dos índices para que ele não saia da faixa permitida. Sua saída deve ser parecida com: Inserindo 5 valores na lista Informe o 1.o valor: 8 Informe o 2.o valor: 2 Informe o 3.o valor: 4 Informe o 4.o valor: 7 Informe o 5.o valor: 3 Valores na lista: 8 -> 2 -> 4 -> 7 -> 3 -> null Inserindo um elemento no índice k Informe o índice desejado: 2 Informe o valor do nó: 9 Valores na lista: 8 -> 2 -> 9 -> 4 -> 7 -> 3 -> null Na saída podemos ver que o índice 2 corresponde ao terceiro elemento da lista ligada. Por isso o valor 4 foi empurrado para a frente para abrir espaço para o valor 9. Se o índice 0 fosse informado, o número 8 seria empurrado para a frente e o nó com valor 9 passaria a ser o início da lista ligada. Veja a resolução comentada deste exercício usando 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; // classe interna usada para representar um // nó na lista ligada class No { int valor; // valor do nó No proximo; // aponta para o novo nó // construtor cheio da classe No public No(int valor, No proximo) { this.valor = valor; this.proximo = proximo; } // construtor vazio da classe No public No() { this.valor = 0; this.proximo = null; } } 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 referência para o início da lista No inicio = null; // vamos inserir 5 valores inteiros na lista ligada int valor; System.out.println("Inserindo 5 valores na lista\n"); for (int i = 0; i < 5; i++) { System.out.print("Informe o " + (i + 1) + ".o valor: "); valor = Integer.parseInt(entrada.nextLine()); // vamos inserir este valor no final da lista inicio = inserirFinal(inicio, valor); } // vamos exibir os valores na lista ligada System.out.print("\nValores na lista: "); exibirLista(inicio); // vamos inserir um novo elemento no índice informado System.out.println("\nInserindo um elemento no índice k\n"); System.out.print("Informe o índice desejado: "); int indice = Integer.parseInt(entrada.nextLine()); // o índice é válido? if ((indice < 0) || (indice > tamanhoLista(inicio) - 1)) { System.out.println("O índice é inválido."); } else { // vamos inserir o novo nó no índice indicado System.out.print("Informe o valor do nó: "); valor = Integer.parseInt(entrada.nextLine()); inicio = inserirIndice(inicio, indice, valor); // vamos exibir os valores na lista ligada System.out.print("\nValores na lista: "); exibirLista(inicio); } } // função que permite adicionar um nó em uma determinada // posição da lista ligada public static No inserirIndice(No inicio, int indice, int valor) { // vamos apontar para o nó inicial No atual = inicio; // criamos um novo nó No novo = criarNo(valor); // a lista ligada ainda está vazia? if (atual == null){ // inicio recebe o novo nó inicio = novo; } else if (indice == 0) { // o índice é igual a 0? vamos inserir // o nó no início da lista ligada novo.proximo = inicio; inicio = novo; } else { // vamos procurar o local adequado para inserção // primeiro criamos um nó temporário No temp = new No(); // apontamos o nó temporário para o início da lista temp = inicio; // e percorremos os nós até encontrar a posição // de inserção for(int i = 1; i < indice; i++) { if (temp != null) { // passa para o próximo nó temp = temp.proximo; } } // concluimos a inserção novo.proximo = temp.proximo; temp.proximo = novo; } // e retornamos o início da lista return inicio; } // função que permite adicionar um nó no final da // lista ligada public static No inserirFinal(No inicio, int valor) { // vamos apontar para o nó inicial No atual = inicio; // criamos um novo nó No novo = criarNo(valor); // a lista ligada ainda está vazia? if (atual == null){ // inicio recebe o novo nó inicio = novo; } else { // temos um ou mais nós na lista ligada // vamos localizar o último nó while (atual.proximo != null) { atual = atual.proximo; } // encontramos o último nó. Agora vamos inserir // o novo nó depois dele atual.proximo = novo; } // e retornamos o início da lista return inicio; } // função usada para construir e retornar um novo nó public static No criarNo(int valor) { // cria o novo nó No no = new No(valor, null); // retorna o nó criado return no; } // função usada para percorrer a lista ligada e // exibir os valores contidos em seus nós public static void exibirLista(No inicio) { // vamos apontar para o início da lista No temp = inicio; // a lista está vazia? if (temp == null) { System.out.println("A lista está vazia."); } else { // esse laço se repete enquanto tempo for // diferente de null while (temp != null) { // vamos mostrar o valor desse nó System.out.print(temp.valor + " -> "); // avança para o próximo nó temp = temp.proximo; } // mostra o final da lista System.out.println("null"); } } // função que retorna a quantidade de nós na lista ligada public static int tamanhoLista(No inicio) { int tamanho = 0; // vamos apontar para o início da lista No temp = inicio; // a lista está vazia? if (temp == null) { return 0; } else { // esse laço se repete enquanto tempo for // diferente de null while (temp != null) { // vamos incrementar o tamanho tamanho++; // avança para o próximo nó temp = temp.proximo; } } return tamanho; } } |
|
Link para compartilhar na Internet ou com seus amigos: | |
Java ::: Classes e Componentes ::: JTree |
Java Swing - Como criar sua primeira JTree usando um vetor de nomes de linguagens de programaçãoQuantidade de visualizações: 12975 vezes |
Este exemplo mostra como criar uma JTree bem simples, e que servirá de base para a criação de aplicações Java Swing mais elaboradas. Os itens da JTree são fornecidos como um vetor de objetos, de forma que cada sub-vetor constitui uma seção da árvore. Os elementos (nós) são inseridos em suas devidas posições usando uma função recursiva. Veja o resultado na figura abaixo: E agora o código Java completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; import javax.swing.*; import java.awt.*; import javax.swing.tree.*; public class Estudos extends JFrame{ public Estudos(){ super("Exemplo de uma JTree simples"); Object[] linguagens = { "Linguagens", new Object[]{ "Compiladas", "C++", "Delphi" }, new Object[]{ "Interpretadas", "JavaScript", "Python", "Ruby" } }; DefaultMutableTreeNode raiz = montar(linguagens); JTree arvore = new JTree(raiz); Container c = getContentPane(); c.setLayout(new FlowLayout()); JScrollPane scrollPane = new JScrollPane(arvore); c.add(scrollPane); setSize(400, 300); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private DefaultMutableTreeNode montar(Object[] hier){ DefaultMutableTreeNode no = new DefaultMutableTreeNode(hier[0]), filho; for(int i = 1; i < hier.length; i++){ Object n_no = hier[i]; if(n_no instanceof Object[]){ // nó possui filhos filho = montar((Object[])n_no); } else{ filho = new DefaultMutableTreeNode(n_no); // folha } no.add(filho); } return(no); } } |
Java ::: Dicas & Truques ::: Mouse e Teclado |
Java Swing para iniciantes - Como detectar eventos do teclado em uma janela JFrame do Java SwingQuantidade de visualizações: 13200 vezes |
Eventos do teclado podem ser detectados em uma janela JFrame do Java Swing por meio da interface KeyListener. Neste exemplo temos uma JFrame que estende essa interface e fornece implementação para o seu método keyPressed(). Temos também um controle JTextArea desabilitado, o qual usamos para exibir a letra e o código da tecla pressionada. Veja o resultado na imagem abaixo: E aqui está 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) ---------------------------------------------------------------------- package arquivodecodigos; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Estudos extends JFrame implements KeyListener{ private JTextArea textArea; public Estudos(){ super("Eventos do Mouse e Teclado"); Container c = getContentPane(); FlowLayout layout = new FlowLayout(FlowLayout.LEFT); c.setLayout(layout); textArea = new JTextArea(100, 150); textArea.setEnabled(false); textArea.setDisabledTextColor(Color.BLACK); c.add(textArea); addKeyListener(this); setSize(350, 250); setVisible(true); } public void keyPressed(KeyEvent e){ textArea.setText( String.format("Tecla: %s - Código Unicode: %d", e.getKeyText(e.getKeyCode()), e.getKeyCode())); } public void keyReleased(KeyEvent e){ // sem implementação } public void keyTyped(KeyEvent e){ // sem implementação } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
Java ::: Dicas & Truques ::: Data e Hora |
Como construir uma data no passado ou futuro em Java usando a classe GregorianCalendarQuantidade de visualizações: 8168 vezes |
Esta dica mostra como construir uma data no passado ou futuro na linguagem Java usando a classe GregorianCalendar, que é uma classe derivada e concreta da classe Calendar. Veja a linha na qual informamos a data a ser criada: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- Calendar data = new GregorianCalendar(2008, 11, 13); Aqui nós estamos usando o construtor da classe GregorianCalendar que requer três valores inteiros. O ano, o mês e o dia. O mês é informado como um valor inteiro na faixa de 0 a 11, ou seja, 0 para janeiro, 1 para fevereiro e assim por diante. Veja o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; import java.util.*; import java.text.*; public class Estudos{ public static void main(String args[]){ // vamos construir a data "13/12/2008" Calendar data = new GregorianCalendar(2008, 11, 13); // vamos exibir o resultado Format formato = new SimpleDateFormat( "EEEE, dd 'de' MMMM 'de' yyyy"); System.out.println(formato.format(data.getTime())); } } Ao executar este código Java nós teremos o seguinte resultado: Sábado, 13 de Dezembro de 2008 |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Postura ética profissional Os engenheiros são profissionais responsáveis por criar soluções para situações do dia a dia que, de certa forma, pareciam impossíveis. Eles otimizaram as formas de transporte, de construção e, principalmente, de produção das indústrias. Diante dessas inovações, é comum que esses profissionais enfrentem situações éticas em que precisem decidir se avançam ou não com tais projetos. Quanto ao conceito de ética na engenharia, é correto afirmar que: A) A ética na engenharia é um aspecto que deve ser considerado em segundo lugar ante os benefícios que pode trazer à humanidade. B) A ética engloba a avaliação racional de ganhos e riscos, definindo as responsabilidades individuais durante a execução de um projeto. C) A ética engloba a avaliação social dos riscos e das responsabilidades coletivas durante a execução de um projeto. D) A ética é um conceito que não se aplica à engenharia, somente à medicina, por esta área tratar diretamente da vida de um indivíduo. E) A ética somente diz respeito à engenharia, pois as descobertas realizadas por tal área englobam um grande número de pessoas. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Responsabilidade civil no código de defesa do consumidor Qual é o prazo decadencial previsto em lei para reclamar o vício do produto, considerando que o vício está em um automóvel? A) 5 dias. B) 15 dias. C) 30 dias. D) 60 dias. E) 90 dias. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Fundações |
Fundações diretas ou rasas As fundações rasas são executadas nas camadas mais superficiais do solo, geralmente em profundidades inferiores a 2m e são utilizadas comumente em obras de pequeno ou médio porte. De acordo com a norma ABNT NBR 6122: 2010 (Projeto e execução de fundações), no que se refere às fundações superficiais rasas ou diretas, assinale a alternativa correta. A) No dimensionamento de fundação superficial solicitada por carga excêntrica, a área comprimida deve ser de, no mínimo, dois terços da área total da fundação. B) Levando em consideração o custo-benefício de uma obra, recomenda-se que a profundidade mínima para assentamento de uma sapata seja de 1m. C) As partes da fundação rasa em contato com o solo devem ser concretadas sobre um lastro de concreto estrutural igual a 2,5cm de espessura. D) No caso de fundações próximas, porém situadas em cotas diferentes, a fundação situada em cota mais alta deve sempre ser executada primeiro. E) As sapatas isoladas não devem ter dimensões em planta inferiores a 1m. Se esse critério não puder ser utilizado, deve-se adotar outro tipo de fundação. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
Qual das seguintes instruções JavaScript é uma definição correta de um array? A) a = new Array[100]; B) var a = new Array(100); C) var[] a = new String[100]; D) var a = new Array[100]; Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Alvenaria: Técnicas construtivas Durante o levantamento de alvenaria, para atenuar as tensões que ficarão concentradas nos contornos dos vãos de portas e janelas devido à descontinuidade da parede, é necessária a execução de elementos estruturais específicos. O elemento localizado acima dos vãos é denominado de: A) Marco. B) Caixilho. C) Esquadria. D) Verga. E) Contramarco. Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
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 |