Você está aqui: Java ::: Estruturas de Dados ::: Lista Ligada Simples

Estruturas de dados para iniciantes - Como criar uma Lista Ligada em Java

Quantidade de visualizações: 704 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

Link para compartilhar na Internet ou com seus amigos:

Java ::: Dicas & Truques ::: Data e Hora

Como usar a classe Calendar do Java em suas aplicações - Java para iniciantes

Quantidade de visualizações: 21059 vezes
[Baseado na documentação Java] - A classe Calendar (pacote java.util) é uma classe abstrata (que não pode ser instanciada usando new) que fornece métodos para efetuar a conversão entre um momento específico no tempo e um conjunto de campos de calendário, tais como YEAR, MONTH, DAY_OF_MONTH, HOUR e assim por diante, e para manipular tais campos, por exemplo, obter a data da próxima semana. Um momento no tempo pode ser representado por um valor de milisegundos que é a diferença entre a data atual e a zero hora do dia 01/01/1970 (Epoch, January 1, 1970 00:00:00.000 GMT (Gregorian)).

Veja a posição desta classe na hierarquia de classes Java:

java.lang.Object
  java.util.Calendar
A classe Calendar implementa as interfaces Serializable, Cloneable e Comparable<Calendar> e sua subclasse conhecida é GregorianCalendar.

Esta classe também fornece campos e métodos adicionais para a implementação de um sistema concreto de calendário fora do pacote java.util. Estes campos e métodos são definidos como protected.

Assim como as demais classes sensitivas à localização (locale-sensitive), a classe Calendar fornece um método de classe chamado getInstance() que nos permite obter um objeto desta classe. Este método retorna um objeto Calendar cujos campos de calendário são inicializados com a data e hora atual. Veja:

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

import java.util.*;

public class Estudos{ 
  public static void main(String args[]){ 
    Calendar agora = Calendar.getInstance();
    System.out.println(agora.toString());
  } 
}

Experimente executar este programa e terá um resultado parecido com:

java.util.GregorianCalendar[time=1228937781807,
areFieldsSet=true,areAllFieldsSet
=true,lenient=true,zone=sun.util.calendar.ZoneInfo
[id="America/Sao_Paulo",offset
=-10800000,dstSavings=3600000,useDaylight=true,
transitions=129,lastRule=java.uti
l.SimpleTimeZone[id=America/Sao_Paulo,offset=
-10800000,dstSavings=3600000,useDay
light=true,startYear=0,startMode=3,startMonth=9,
startDay=15,startDayOfWeek=1,sta
rtTime=0,startTimeMode=0,endMode=3,endMonth=1,
endDay=15,endDayOfWeek=1,endTime=0
,endTimeMode=0]],firstDayOfWeek=2,
minimalDaysInFirstWeek=1,ERA=1,YEAR=2008,MONTH
=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=
10,DAY_OF_YEAR=345,DAY_OF_WEEK=
4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=5,HOUR_OF_DAY
=17,MINUTE=36,SECOND=21,MILLI
SECOND=807,ZONE_OFFSET=-10800000,DST_OFFSET=3600000]


Como podemos ver, todas as informações relativas à data e hora que poderemos precisar estão contidas neste resultado.

Um objeto Calendar pode produzir todos os valores de todos os campos de calendário necessários para implementar a formatação de data e hora para uma determinada língua e estilo de calendário (por exemplo, Japanese-Gregorian, Japanese-Traditional). A classe Calendar define a faixa de valores retornados por determinados campos de calendário, assim como seus significados. Por exemplo, o primeiro mês do sistema de calendário tem o valor MONTH == JANUARY para todos os calendários. Outros valores são definidos por subclasses concretas, tais como ERA.


Java ::: Classes e Componentes ::: JComponent

Java Swing - Como usar a classe JComponent em suas aplicações Java Swing

Quantidade de visualizações: 11877 vezes
A classe JComponent serve como classe base abstrata a partir da qual todos os componentes Swing herdam suas funcionalidades. Esta classe herda da Classe Container, que por sua vez herda de Component, que herda de Object.

Várias classes do Java Swing herdam de JComponent, direta ou indiretamente. Por exemplo, a classe JButton herda de javax.swing.AbstractButton, que, por sua vez, herda de javax.swing.JComponent.

Entender o papel da classe JComponent é muito importante, pois nos permite o uso de polimorfismo e também de vários design patterns. Sendo assim, analise o seguinte código Java Swing:

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

package arquivodecodigos;

import java.awt.*;
import javax.swing.*;
 
public class Estudos extends JFrame{
  public Estudos() {
    super("Minha primeira aplicação GUI");
     
    // vamos declarar um objeto da classe JComponent
    // e atribuir a ele um JButton
    JComponent btn = new JButton("Clique Aqui");
    getContentPane().add(btn, BorderLayout.SOUTH);
 
    setSize(350, 250);
    setVisible(true);
  }
   
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Veja que declaramos uma variável do tipo JComponent e atribuímos a ela um objeto da classe JButton. Isso é perfeitamente possível, já que JButton herda de JComponent, ainda que indiretamente.

Entre as classes que herdam de JComponent estão: AbstractButton, BasicInternalFrameTitlePane, Box, Box.Filler, JColorChooser, JComboBox, JFileChooser, JInternalFrame, JInternalFrame.JDesktopIcon, JLabel, JLayeredPane, JList, JMenuBar, JOptionPane, JPanel, JPopupMenu, JProgressBar, JRootPane, JScrollBar, JScrollPane, JSeparator, JSlider, JSpinner, JSplitPane, JTabbedPane, JTable, JTableHeader, JTextComponent, JToolBar, JToolTip, JTree, JViewport.


Java ::: Java para Engenharia ::: Geometria Analítica e Álgebra Linear

Como somar os elementos da diagonal principal de uma matriz em Java

Quantidade de visualizações: 2774 vezes
A Matriz quadrada é um tipo especial de matriz que possui o mesmo número de linhas e o mesmo número de colunas, ou seja, dada uma matriz Anxm, ela será uma matriz quadrada se, e somente se, n = m, onde n é o número de linhas e m é o número de colunas.

Em geral as matrizes quadradas são chamadas de Matrizes de Ordem n, onde n é o número de linhas e colunas. Dessa forma, uma matriz de ordem 4 é uma matriz que possui 4 linhas e quatro colunas.

Toda matriz quadrada possui duas diagonais, e elas são muito exploradas tanto na matemática quanto na construção de algorítmos. Essas duas diagonais são chamadas de Diagonal Principal e Diagonal Secundária.

A diagonal principal de uma matriz quadrada une o seu canto superior esquerdo ao canto inferior direito. Veja:



Nesta dica veremos como calcular a soma dos valores dos elementos da diagonal principal de uma matriz usando Java. Para isso, só precisamos manter em mente que a diagonal principal de uma matriz A é a coleção das entradas Aij em que i é igual a j. Assim, tudo que temos a fazer é converter essa regra para código Java.

Veja um trecho de código Java completo no qual pedimos para o usuário informar os elementos da matriz e em seguida mostramos a soma dos elementos da diagonal superior:

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

package arquivodecodigos;
 
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 uma matriz de três linhas e três colunas
    int matriz[][] = new int[3][3];
    int soma_diagonal = 0; // guarda a soma dos elementos na diagonal principal
     
    // vamos ler os valores para os elementos da matriz
    for(int i = 0; i < matriz.length; i++){ // linhas
      for(int j = 0; j < matriz[0].length; j++){ // colunas
        System.out.print("Informe o valor para a linha " + i + " e coluna " 
          + j + ": ");
        matriz[i][j] = Integer.parseInt(entrada.nextLine());       
      }       
    }
     
    // vamos mostrar a matriz da forma que ela
    // foi informada
    System.out.println();
    // percorre as linhas
    for(int i = 0; i < matriz.length; i++){ 
      // percorre as colunas
      for(int j = 0; j < matriz[0].length; j++){ 
        System.out.printf("%5d ", matriz[i][j]);
      }
      // passa para a próxima linha da matriz
      System.out.println();
    }
     
    // vamos calcular a soma dos elementos da diagonal   
    // principal
    for(int i = 0; i < matriz.length; i++){
      for(int j = 0; j < matriz[0].length; j++){
        if(i == j){
          soma_diagonal = soma_diagonal + matriz[i][j];
        }
      }
    }
     
    // finalmente mostramos a soma da diagonal principal
    System.out.println("\nA soma dos elementos da diagonal principal é: " 
      + soma_diagonal);
  }
}

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

Informe o valor para a linha 0 e coluna 0: 3
Informe o valor para a linha 0 e coluna 1: 7
Informe o valor para a linha 0 e coluna 2: 9
Informe o valor para a linha 1 e coluna 0: 2
Informe o valor para a linha 1 e coluna 1: 4
Informe o valor para a linha 1 e coluna 2: 1
Informe o valor para a linha 2 e coluna 0: 5
Informe o valor para a linha 2 e coluna 1: 6
Informe o valor para a linha 2 e coluna 2: 8

    3     7     9 
    2     4     1 
    5     6     8 

A soma dos elementos da diagonal principal é: 15



Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira

Ações em estruturas: apresentação dos principais carregamentos na análise de estruturas convencionais

Uma das formas de produzir energia elétrica é por meio da energia nuclear. A energia nuclear frequentemente é contestada por apresentar dois grandes problemas: a geração de lixo nuclear, de difícil descarte; e a fragilidade estrutural dos reatores nucleares.
Quanto ao segundo ponto, é necessário construir uma estrutura no entorno dos reatores que seja capaz de absorver, inclusive, o impacto de uma bomba (em caso de guerra). Uma bomba é um caso de que tipo de ação?

A) Permanente direta.

B) Excepcional.

C) Acidental indireta.

D) Acidental direta.

E) Permanente indireta.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Fundações

Fundações diretas ou rasas

A viga de fundação é também chamada de viga baldrame. É utilizada para conectar sapatas isoladas e distribuir melhor o peso da estrutura para as camadas do solo. A partir disso, projete uma viga de fundação para os pilares P1 e P2, indicados na figura, sendo a taxa no solo σs = 0,4.

Considere: P1 = P2 = 1.800KN.

Dimensões P1 e P2 = 25cmX100cm.



A) a = 400cm e b = 280cm.

B) a = 365cm e b = 250cm.

C) a = 250cm e b = 365cm.

D) a = 345cm e b = 230cm.

E) a = 405cm e b = 315cm.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Ética e Legislação Profissional

Introdução à Ética

Entre os estudos proeminentes sobre a definição da ética, da moral, sua presença e importância entre os seres humanos racionalmente organizados em sistemas sociais, as sociedades, estão as análises e reflexões dos filósofos da Grécia Antiga. Embora cada um, entre expoentes como Platão, Aristóteles e Sócrates, tivesse uma proposta de interpretação para a moral e para a ética, é possível dizer que há uma percepção comum: a de que a "A ética é a morada do homem".

O que isso significa?

A) A moradia física para o grego era a base da sociedade, em torno da qual circundavam os demais significados socialmente apreendidos, então, ser ético era ser bom.

B) Morada é um recanto simples onde o homem pode viver com honestidade, e ser uma pessoa ética é ser honesto.

C) O sentido de morada era conceito existencial, confiado ao cidadão que, vivendo conforme normas e leis existentes, teria a segurança de uma vida ética.

D) Assim como o mito da caverna, a lenda da morada também é falsa e se destina à formação de exemplos aos estudantes de filosofia da atualidade.

E) Aristóteles escreveu essa máxima pensando em todos os habitantes da Grécia, que exibiam a igualdade de comportamento, pensamento e opinião política.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira

Perfil em aço

Alguns materiais fazem parte do processo de produção do aço ou até são resultantes de suas variações. Eles apresentam características que diferem entre si. Um desses materiais contém de 3 a 4% de carbono em sua composição.

Assinale a alternativa que indica corretamente qual é esse material.

A) Aço.

B) Aço macio.

C) Ferro fundido.

D) Ferro forjado.

E) Aço de médio carbono.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Fundações

Sondagem à Percussão (SPT) e Rotativa (RQD)

Na sondagem SPT, o que significa o N30?

A) Corresponde ao número de golpes dos últimos 30cm na fase de amostragem.

B) Corresponde à energia de 30% a ser considerada.

C) Corresponde a 30 golpes para penetrar um metro.

D) Corresponde ao número de golpes dos primeiros 30cm do amostrador.

E) Corresponde à energia que causa a perfuração dinâmica de 30cm com uma única pancada.
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

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



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