Você está aqui: Java ::: Estruturas de Dados ::: Lista Ligada Simples |
Estruturas de dados para iniciantes - Como criar uma Lista Ligada em JavaQuantidade de visualizações: 776 vezes |
A estrutura de dados Lista Ligada, ou Lista Encadeada, ou ainda Lista Singularmente Ligada, é a primeira estrutura de dados dinâmica que devemos estudar e dominar bem, antes de passarmos para as filas, pilhas, árvores e grafos. Uma Lista Ligada é uma estrutura de dados linear, na qual os elementos são guardados como nós. Cada nó da lista possui dois atributos: Um campo chamado "valor" ou "dados" (que pode guardar um valor inteiro, uma referência a um vetor ou matriz, objetos, etc) e um campo "proximo" (que guarda um ponteiro ou referência para o próximo elemento da lista, conforme mostrado na imagem abaixo: ![]() Essa definição é muito importante. Veja que temos uma estrutura ou classe (dependente da sua linguagem de programação) chamada No. O campo valor guarda o inteiro 15, enquanto o campo Proximo guarda uma referência a um objeto igual a ele, ou seja, o ponteiro "proximo" é o responsável pelo encadeamento da lista. Quando este ponteiro (ou referência) não estiver apontando para nenhum local de memória, então saberemos que ele é o último nó da lista. Quando encadeamos (ou ligamos) vários nós, temos a seguinte representaçaõ de lista ligada: ![]() Veja que nossa lista possui três nós. O primeiro nó, que é o início da lista, possui o valor 5, enquanto o terceiro nó, com o valor 4, é o final da lista. Em geral identificamos como final da lista o nó cujo ponteiro "proximo" não está apontando para nenhum outro nó. Agora que já vimos a teoria, vamos à implementação de uma lista encadeada simples em Java. Para facilitar seus estudos, eu optei por colocar tudo em apenas um código. Quando quiser avançar um pouco mais, divida as classes em arquivos .java separados. Eis o código completo: ---------------------------------------------------------------------- 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 class No { // valor inteiro que será guardado neste nó int valor; // ponteiro para o próximo nó da lista No proximo; }; // definição da classe ListaLigada class ListaLigada{ // aponta para o início da lista No inicio; // construtor que permite criar uma lista ligada vazia public ListaLigada(){ // o valor null para o início da lista indica que ela // está vazia this.inicio = null; } // método que permite exibir os nós da lista public void imprimirLista(){ // criamos um nó temporário para apontar para // o primeiro nó da lista No temp = this.inicio; // testamos se a lista não está vazia if(temp != null) { System.out.println("Os valores na lista ligada são:\n"); // varremos a lista até encontrarmos um nó nulo while(temp != null){ // exibimos o valor do nó System.out.print(temp.valor + " "); // e saltamos para o nó seguinte temp = temp.proximo; } } else { // a lista está vazia System.out.println("\nLista vazia\n"); } } }; public class Estudos { public static void main(String[] args){ // vamos criar uma lista ligada vazia ListaLigada lista = new ListaLigada(); // vamos inserir o primeiro nó na lista No no1 = new No(); no1.valor = 5; // define o valor do nó no1.proximo = null; // náo aponta para nenhum outro nó // marcamos este nó como sendo o início da lista lista.inicio = no1; // vamos inserir o segundo nó No no2 = new No(); no2.valor = 32; // define o valor do nó no2.proximo = null; // náo aponta para nenhum outro nó // o primeiro nó vai apontar para este nó agora no1.proximo = no2; // vamos inserir mais um nó? No no3 = new No(); no3.valor = 7; // define o valor do nó no3.proximo = null; // náo aponta para nenhum outro nó // o segundo nó vai apontar para este nó no2.proximo = no3; // vamos imprimir a lista lista.imprimirLista(); // uma quebra de linha pra deixar o console bonito System.out.println("\n"); } } Ao executar este código Java nós teremos o seguinte resultado: Os valores na lista ligada são: 5 32 7 |
![]() |
Java ::: Dicas & Truques ::: Programação Orientada a Objetos |
Como criar e usar métodos estáticos em suas classes Java - Programação Orientada a Objetos em Java - Java OOPQuantidade de visualizações: 13410 vezes |
Como já vimos em outras dicas desta seção, uma classe Java possui propriedades (variáveis) e métodos (funções). Veja a seguinte declaração de uma classe Produto:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; // declaração da classe Produto public class Produto { private String nome; private double preco; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public double getPreco() { return preco; } public void setPreco(double preco) { this.preco = preco; } } Aqui cada instância da classe Produto terá suas próprias variáveis nome e preco e os métodos que permitem acesso e alteração destas variáveis também estão disponíveis a cada instância. Há, porém, situações nas quais gostaríamos que um determinado método estivesse atrelado à classe e não à cada instância individual. Desta forma, é possível chamar um método de uma classe sem a necessidade da criação de instâncias da mesma. O método main() presente em todas as aplicações Java é um bom exemplo deste tipo de método. Métodos estáticos em Java podem ser criados por meio do uso da palavra-chave static. É comum tais métodos serem declarados com o modificador public, o que os torna acessíveis fora da classe na qual estes foram declarados. Veja um exemplo: Código para Pessoa.java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; // classe Pessoa com duas variáveis privadas e // um método estático public class Pessoa { private String nome; private int idade; // um método estático que permite verificar a validade // de um número de CPF public static boolean isCPFValido(String cpf){ // alguns cálculos aqui return true; } } Veja agora como podemos chamar o método isCPFValido() sem a necessidade da criação de uma nova instância da classe Pessoa: Código para Main.java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; public class Main { public static void main(String[] args) { // vamos efetuar uma chamada ao método isCPFValido() sem // criar uma instância da classe Pessoa if(Pessoa.isCPFValido("12345")){ System.out.println("CPF Válido"); } else{ System.out.println("CPF Inválido"); } } } Note que o método estático isCPFValido() da classe Pessoa foi declarado assim: public static boolean isCPFValido(String cpf); Desta forma, podemos chamá-lo a partir de código externo à classe sem a necessidade de criar uma nova instância da mesma. Veja: if(Pessoa.isCPFValido("12345")){} É importante notar que métodos estáticos não possuem acesso a variáveis e métodos não estáticos da classe, tampouco ao ponteiro this (que só existe quando criamos instâncias da classe). Assim, o trecho de código abaixo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // um método estático que permite verificar a validade // de um número de CPF public static boolean isCPFValido(String cpf){ // alguns cálculos aqui // vamos acessar a variável não estática nome nome = "Osmar J. Silva"; return true; } vai gerar o seguinte erro de compilação: Uncompilable source code - non-static variable nome cannot be referenced from a static context. Se usarmos this.nome a mensagem de erro de compilação será: Uncompilable source code - non-static variable this cannot be referenced from a static context. Métodos estáticos são úteis quando precisamos criar classes que atuarão como suporte, nas quais poderemos chamar funções (métodos) auxiliares sem a necessidade de criar novas instâncias a cada vez que estas funções forem necessárias. |
Java ::: Fundamentos da Linguagem ::: Tipos de Dados |
Como usar o tipo de dados char da linguagem JavaQuantidade de visualizações: 25281 vezes |
O tipo de dados char é usado para representar um único caractere. Veja:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ char letra1 = 'A'; char letra2 = 'B'; System.out.println("As letras são: " + letra1 + " e " + letra2); System.exit(0); } } Observe que um literal string deve estar entre aspas duplas, enquanto que um literal do tipo caractere deve estar entre aspas simples. Desta forma, "H" é uma string e 'H' é um caractere. O tipo char é integral mas sem sinal. A faixa de uma variável deste tipo vai de 0 à 65536. Os caracteres em Java são codificados em Unicode, que é um codificação de 16 bits capaz de representar uma larga faixa de caracteres internacionais. Se os 9 bits mais significantes de um char forem todos 0, então a codificação será a mesma que o ASCII de 7 bits. É possível atribuir literais inteiros à uma variável do tipo char. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ char letra = 98; System.out.println("A letra é: " + letra); System.exit(0); } } Este código exibirá o caractere 'b'. Veja um exemplo no qual imprimimos todas as letras do alfabeto minúsculo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ for(char i = 97; i <= 122; i++){ System.out.print(i + " "); } System.exit(0); } } O tipo char pode ser convertido (sem a necessidade de cast) para os seguintes tipos: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- char -> int -> long -> float -> double Não é possível converter um char em um short ou byte. Caso isso seja realmente necessário, temos que fazer uma coerção (cast). Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ char letra = 57; byte valor = (byte)(letra); System.exit(0); } } É fácil entender porque um char não pode ser convertido implicitamente em um byte. Um char possui 16 bits enquanto um byte possui apenas 8 bits. Mas, um short possui 16 bits. Assim, o que impede a conversão implicita de um char para um short? É simples. Como o tipo short possui sinal (aceita valores negativos) e o tipo char é sem sinal, o resultado é que o tipo short possui um bit a menos (reservado para o sinal) e portanto, não pode acomodar os 16 bits do tipo char. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercício Resolvido de Java - Escreva um programa Java que leia os elementos de um vetor A de dez elementos inteiros e construa outro vetor BQuantidade de visualizações: 336 vezes |
Pergunta/Tarefa: Escreva um programa Java que leia os elementos de um vetor A de dez elementos inteiros e construa outro vetor B com seus elementos distribuídos da seguinte forma: Vetor A = [8, 5, 4, 1, 2, 3, 4, 6, 9, 7] Vetor B = [24, 10, 12, 2, 6, 6, 12, 12, 27, 14] Note que os elementos do vetor B seguem um padrão. Se o elemento do vetor A estiver em uma posição par, então o elemento do vetor B será o triplo do elemento do vetor A. Caso contrário o elemento do vetor B será o dobro do elemento do vetor A. Neste exercício a primeira posição/índice dos vetores é assumida como sendo zero. Em algumas linguagens de programação o primeiro índice é um e não zero. Sua saída deverá ser parecida com: Informe o valor do 1.o elemento: 8 Informe o valor do 2.o elemento: 5 Informe o valor do 3.o elemento: 4 Informe o valor do 4.o elemento: 1 Informe o valor do 5.o elemento: 2 Informe o valor do 6.o elemento: 3 Informe o valor do 7.o elemento: 4 Informe o valor do 8.o elemento: 6 Informe o valor do 9.o elemento: 9 Informe o valor do 10.o elemento: 7 Elementos do vetor A: 8, 5, 4, 1, 2, 3, 4, 6, 9, 7 Elementos do vetor B: 24, 10, 12, 2, 6, 6, 12, 12, 27, 14 Veja a resolução comentada deste exercício em 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) { // vamos fazer a leitura usando a classe Scanner Scanner entrada = new Scanner(System.in); // vamos declarar e construir dois vetores de 10 inteiros int vetor_a[] = new int[10]; int vetor_b[] = new int[10]; // agora vamos pedir para o usuário informar os valores // dos elementos do vetor A for(int i = 0; i < vetor_a.length; i++){ System.out.print("Informe o valor do " + (i + 1) + ".o elemento: "); vetor_a[i] = Integer.parseInt(entrada.nextLine()); } // vamos construir o vetor B for(int i = 0; i < vetor_a.length; i++){ // o índice atual é par? if(i % 2 == 0){ vetor_b[i] = vetor_a[i] * 3; } else{ vetor_b[i] = vetor_a[i] * 2; } } // vamos mostrar os elementos do vetor A System.out.println("\nElementos do vetor A:\n"); for(int i = 0; i < vetor_a.length; i++){ System.out.print(vetor_a[i] + ", "); } // vamos mostrar os elementos do vetor B System.out.println("\n\nElementos do vetor B:\n"); for(int i = 0; i < vetor_b.length; i++){ System.out.print(vetor_b[i] + ", "); } System.out.println(); } } |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Python - Como gerar números aleatórios em Python usando o método random.randint() da biblioteca NumPy |
Códigos Fonte |
![]() 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 |
![]() 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 |