<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lucas</title>
    <description>The latest articles on DEV Community by Lucas (@lucasr_luz).</description>
    <link>https://dev.to/lucasr_luz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1182839%2Fe8e4513e-cabe-4f78-82ff-c4880b0fadcf.jpg</url>
      <title>DEV Community: Lucas</title>
      <link>https://dev.to/lucasr_luz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lucasr_luz"/>
    <language>en</language>
    <item>
      <title>O básico de Git</title>
      <dc:creator>Lucas</dc:creator>
      <pubDate>Tue, 21 Nov 2023 12:36:42 +0000</pubDate>
      <link>https://dev.to/lucasr_luz/o-basico-de-git-3hlm</link>
      <guid>https://dev.to/lucasr_luz/o-basico-de-git-3hlm</guid>
      <description>&lt;h2&gt;
  
  
  O que é Git?
&lt;/h2&gt;

&lt;p&gt;Git é um versionador de código, gratuito e de código aberto. Um versionador de código serve para que possamos criar um histórico de tudo o que fazemos no código, isso é ótimo porque podemos trabalhar em equipe e todas as alterações ficam registradas de forma padronizada, facilitando o entendimento do que a outra pessoa fez no código e tendo a possibilidade de "voltar no tempo", para uma determinada versão do código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuração básica
&lt;/h2&gt;

&lt;p&gt;Depois de instalar o Git é importante fazer algumas configurações básicas. Primeiro vamos definir o email e username, isso serve para identificar quem fez alguma alteração no código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git config --global user.email "&amp;lt;seu-email&amp;gt;"
$ git config --global user.name "&amp;lt;seu-nome&amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos definir um editor que será utilizado para resolver conflitos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git config --global core.editor "&amp;lt;seu-editor&amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para finalizar vamos definir o nome padrão da branch quando inicializamos o Git.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git config --global init.defaultBranch "main"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos visualizar as configurações que fizemos com &lt;code&gt;$ git config --list&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git config -list

user.email="&amp;lt;seu-email&amp;gt;"
user.name="&amp;lt;seu-nome&amp;gt;"
init.defaultBranch="main"
core.editor="&amp;lt;seu-editor&amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Inicializando um novo repositório local
&lt;/h2&gt;

&lt;p&gt;Antes de inicializar um novo repositório Git vamos criar um diretório para podermos trabalhar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdir my-project
$ cd my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora com o diretório criado podemos inicializar um novo repositório Git.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note que foi criado um diretório &lt;code&gt;.git&lt;/code&gt; que contém todos os arquivos de repositório necessários, portando não mexa nestes arquivos, eles são necessários para o funcionamento do Git.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trabalhando com arquivos
&lt;/h2&gt;

&lt;p&gt;Depois de inicializar um novo repositório Git no diretório que criamos, vamos começar criando um novo arquivo com o nome de &lt;code&gt;a.txt&lt;/code&gt; com um conteúdo qualquer dentro.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ touch a.txt
$ echo "Conteúdo do arquivo a.txt" &amp;gt;&amp;gt; a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Git possuí um comando muito importante para que possamos visualizar o status do nosso repositório que é o &lt;code&gt;$ git status&lt;/code&gt;. Executando ele agora podemos ver algumas informações.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git status

Untracked files:
  (use "git add &amp;lt;file&amp;gt;..." to include in what will be committed)
    a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui o Git está informando que exite um ou mais arquivos que não estão sendo rastreados, ou seja, caso fizermos alterações nesse arquivo não vamos conseguir ter um histórico do que foi alterado ou adicionado.&lt;/p&gt;

&lt;p&gt;Para criar um commit você precisa separar os arquivos que irão para o commit e para isso usamos o comando &lt;code&gt;$ git add &amp;lt;nome-do-arquivo&amp;gt;...&lt;/code&gt;, no nosso caso vamos adicionar o arquivo &lt;code&gt;a.txt&lt;/code&gt; e rodar &lt;code&gt;$ git status&lt;/code&gt; para ver o que mudou.&lt;/p&gt;

&lt;p&gt;Mas antes vamos entender o que é um commit. Commits são a parte essencial do Git, basicamente um commit é o estado do seu repositório em um determinado momento, normalmente commits são feitos a cada nova pequena funcionalidade. Neles contém informações sobre a data, quem fez a alteração e a mensagem informando sobre o que foi alterado ou adicionado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git add a.txt
$ git status

On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached &amp;lt;file&amp;gt;..." to unstage)
    new file:   a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse caso o Git está informando os arquivos que irão para o próximo commit e o status do arquivo, se ele é novo, foi deletado ou alterado.&lt;/p&gt;

&lt;p&gt;Agora vamos fazer o commit com &lt;code&gt;$ git commit -m "&amp;lt;mensagem-do-commit&amp;gt;"&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git commit -m "adicionado arquivo a.txt"
$ git status

On branch main
nothing to commit, working tree clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para visualizar o histórico de commits feitos, podemos usar o comando &lt;code&gt;$ git log&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git log

commit de75b4a5e0affac9c36e70ffdfbcc43f4edd1fb4 (HEAD -&amp;gt; main)
Author: &amp;lt;seu-nome&amp;gt; &amp;lt;seu-email&amp;gt;
Date:   Sun Oct 29 19:18:37 2023 -0300

    adicionado arquivo a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui está apresentado todas as informações sobre os commits feitos, data, nome e email de quem fez, a mensagem indicando a mudança e o identificador do commit que fica logo na primeira linha após a palavra "commit". Para sair dessa tela pressione a tecla "q".&lt;/p&gt;

&lt;p&gt;Agora vamos fazer uma alteração no arquivo &lt;code&gt;a.txt&lt;/code&gt; adicionado mais conteúdo e vamos marcar essa alteração para o próximo commit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ echo "Novo conteúdo do arquivo a.txt" &amp;gt;&amp;gt; a.txt
$ git add a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos supor que eu adicionei um arquivo errado ou que eu não queira que esse arquivo vá para o próximo commit. Como reverter isso? Simples, é só executar o comando &lt;code&gt;$ git restore --staged &amp;lt;nome-do-arquivo&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git restore --staged a.txt
$ git status

On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add &amp;lt;file&amp;gt;..." to update what will be committed)
  (use "git restore &amp;lt;file&amp;gt;..." to discard changes in working directory)
    modified:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso você queira descartar as alterações que você fez no arquivo você pode executar o comando &lt;code&gt;$ git restore &amp;lt;nome-do-arquivo&amp;gt;&lt;/code&gt;, perceba que aqui não temos a parte &lt;code&gt;--staged&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git restore a.txt
$ git status

On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Branch
&lt;/h2&gt;

&lt;p&gt;Com o que foi visto até agora podemos trabalhar tranquilamente com Git, mas ainda falta um último tópico a ser visto que é sobre branch.&lt;/p&gt;

&lt;p&gt;Branch é basicamente uma ramificação no repositório onde podemos ter, por exemplo, uma branch que trabalhamos na funcionalidade "abc" e outra branch para trabalhar na funcionalidade "def" e quando a funcionalidade estiver pronta podemos fazer um merge para a branch principal, que em todo repositório Git se chama &lt;code&gt;main&lt;/code&gt;. O ponto aqui é que quando criamos branchs não vamos comprometer a branch principal do repositório caso a funcionalidade não fique boa ou as coisas não deem certo.&lt;/p&gt;

&lt;p&gt;Voltando ao repositório que estamos trabalhando, vamos começar com o comando &lt;code&gt;$ git branch&lt;/code&gt; que mostra todas as branchs criadas nesse repositório.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* main
(END)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos ver que temos uma branch criada, que se chama &lt;code&gt;main&lt;/code&gt; essa branch é criada pelo próprio Git na inicialização do repositório e é onde todo o código principal do projeto está, o que estiver na produção é o que está na branch &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Agora vamos supor que queremos fazer um teste de uma nova funcionalidade mas não queremos comprometer nada do fizemos até agora, para isso vamos criar uma nova branch com o comando &lt;code&gt;$ git branch &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git branch funcionalidade-abc
$ git branch

  funcionalidade-abc
* main
(END)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note que criamos uma nova branch e depois listamos as branchs existentes no repositório e agora temos duas. Para mudar de branch usamos o comando &lt;code&gt;$ git checkout &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git checkout funcionalidade-abc
Switched to branch 'funcionalidade-abc'

$ git branch

* funcionalidade-abc
  main
(END)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o comando &lt;code&gt;$ git branch&lt;/code&gt; podemos notar que o &lt;code&gt;*&lt;/code&gt; que estava no &lt;code&gt;main&lt;/code&gt; mudou para &lt;code&gt;funcionalidade-abc&lt;/code&gt; indicando em qual branch estamos trabalhando.&lt;/p&gt;

&lt;p&gt;A partir de agora podemos trabalhar normalmente como antes, vamos adicionar mais algum conteúdo no arquivo &lt;code&gt;a.txt&lt;/code&gt;, vamos marcar essa alteração para o próximo commit e depois vamos fazer o commit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ echo "Novo conteúdo do arquivo a.txt" &amp;gt;&amp;gt; a.txt
$ git add a.txt
$ git commit -m "adicionado novo conteúdo no arquivo a.txt"
$ git log

commit d26ed7a5fde35bb229cf0f3ade3171ac886f44ca (HEAD -&amp;gt; funcionalidade-abc)
Author: &amp;lt;seu-nome&amp;gt; &amp;lt;seu-email&amp;gt;
Date:   Fri Nov 17 09:43:40 2023 -0300

    adicionado novo conteúdo no arquivo a.txt

commit de75b4a5e0affac9c36e70ffdfbcc43f4edd1fb4 (main)
Author: &amp;lt;seu-nome&amp;gt; &amp;lt;seu-email&amp;gt;
Date:   Sun Oct 29 19:18:37 2023 -0300

    adicionado arquivo a.txt
(END)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de rodar &lt;code&gt;$ git log&lt;/code&gt; para ver o histórico de commits, podemos ver que temos agora dois commits, o primeiro (de baixo para cima) é o que fizemos no início desse artigo e o último commit é o que acabamos de fazer. Note que o primeiro foi feito na branch &lt;code&gt;main&lt;/code&gt; e o último foi feito na branch &lt;code&gt;funcionalidade-abc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Voltando para a branch principal &lt;code&gt;main&lt;/code&gt; podemos notar que as modificações que fizemos na outra branch não estão lá.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git checkout main
Switched to branch 'main'
$ git log

commit de75b4a5e0affac9c36e70ffdfbcc43f4edd1fb4 (main)
Author: &amp;lt;seu-nome&amp;gt; &amp;lt;seu-email&amp;gt;
Date:   Sun Oct 29 19:18:37 2023 -0300

    adicionado arquivo a.txt
(END)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui está o poder de usar branchs, as modificações ficam separadas, não comprometendo a branch principal. Agora vamos supor que a funcionalidade que fizemos está de acordo, ocorreu tudo bem e é uma boa funcionalidade para adicionar no projeto, como juntar as modificação feitas, na branch principal? Para isso vamos usar o comando &lt;code&gt;$ git merge &amp;lt;nome-da-branch&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git merge funcionalidade-abc

Updating de75b4a..d26ed7a
Fast-forward
 a.txt | 1 +
 1 file changed, 1 insertion(+)

$ git log

commit d26ed7a5fde35bb229cf0f3ade3171ac886f44ca (HEAD -&amp;gt; main, funcionalidade-abc)
Author: &amp;lt;seu-nome&amp;gt; &amp;lt;seu-email&amp;gt;
Date:   Fri Nov 17 09:43:40 2023 -0300

    adicionado novo conteúdo no arquivo a.txt

commit de75b4a5e0affac9c36e70ffdfbcc43f4edd1fb4
Author: &amp;lt;seu-nome&amp;gt; &amp;lt;seu-email&amp;gt;
Date:   Sun Oct 29 19:18:37 2023 -0300

    adicionado arquivo a.txt
(END)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos ver que os dois commit estão apontando para a branch &lt;code&gt;main&lt;/code&gt;. A branch que criamos ainda está criada e você pode manter uma branch para apenas desenvolvimento, a medida que novas funcionalidade são desenvolvidas na branch de desenvolvimento, você faz o merge para a branch principal.&lt;/p&gt;

&lt;p&gt;Caso você tenha criado uma branch para apenas fazer algum teste e não deu certo e você queira deletar esta branch, você pode usar o comando &lt;code&gt;$ git branch -D &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt;. Caso você já vez o merge e queira deletar esta branch pois não vai mais usá-la, você pode usar o mesmo comando só que com o "d" minúsculo &lt;code&gt;$ git branch -d &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git branch -d funcionalidade-abc
Deleted branch funcionalidade-abc (was d26ed7a).

* main
(END)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resumo do que foi visto
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$ git init&lt;/code&gt; - Inicializar um novo repositório.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git status&lt;/code&gt; - Visualizar o status do repositório.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git add &amp;lt;nome-do-arquivo&amp;gt;&lt;/code&gt; - Adiciona um ou mais arquivos para iram para o próximo commit.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git restore --staged &amp;lt;nome-do-arquivo&amp;gt;&lt;/code&gt; - Remove o arquivo para ir para o próximo commit.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git restore &amp;lt;nome-do-arquivo&amp;gt;&lt;/code&gt; - Descarta as alterações feitas no arquivos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git commit -m "&amp;lt;mensagem-do-commit&amp;gt;"&lt;/code&gt; - Cria um commit.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git branch&lt;/code&gt; - Lista as branchs criadas.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git branch &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt; - Cria uma nova branch.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git checkout &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt; - Muda de branch.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git branch -d &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt; - Deleta uma branch que já fez o marge.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git branch -D &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt; - Deleta uma branch que não fez o marge.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ git merge &amp;lt;nome-da-branch&amp;gt;&lt;/code&gt; - Faz o merge da branch atual com a indicada. &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
      <category>programming</category>
    </item>
    <item>
      <title>Estrutura de Dados - Parte 1</title>
      <dc:creator>Lucas</dc:creator>
      <pubDate>Mon, 13 Nov 2023 22:15:54 +0000</pubDate>
      <link>https://dev.to/lucasr_luz/estrutura-de-dados-parte-1-2ik0</link>
      <guid>https://dev.to/lucasr_luz/estrutura-de-dados-parte-1-2ik0</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Nessa primeira parte vamos falar sobre o que é uma estrutura de dados, para que serve e sobre alguns dos tipos de estrutura de dados, array, linked list, stack e queue. Na segunda parte vou falar sobre hash table, graph e tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é uma estrutura de dados
&lt;/h2&gt;

&lt;p&gt;Uma estrutura de dados é a forma de como organizamos os dados para que possamos guardá-los, acessá-los e modificá-los com frequência e eficiência.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principais estrutura de dados
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Array&lt;/li&gt;
&lt;li&gt;Linked List&lt;/li&gt;
&lt;li&gt;Stack&lt;/li&gt;
&lt;li&gt;Queue&lt;/li&gt;
&lt;li&gt;Hash Table&lt;/li&gt;
&lt;li&gt;Graph&lt;/li&gt;
&lt;li&gt;Tree&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Array
&lt;/h2&gt;

&lt;p&gt;O array é um tipo de estrutura de dados básica que temos já implementado na maioria das linguagens de programação. Sua principal característica é que seu tamanho é fixo, não podemos aumentar e nem diminuir seu tamanho e o tipo de dado dos valores armazenados devem ser todos iguais. Para acessar algum valor armazenado utilizamos índices que sempre começa com &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Arrays são armazenados de forma contígua na memória, isso explica o fato de que não podemos aumentar ou diminuir o seu tamanho, pois caso aumentarmos o seu tamanho não saberemos se vamos conseguir usar o próximo local de memória gratuitamente. &lt;/p&gt;

&lt;p&gt;Exemplo de um array com 1 elemento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EcsnUWDk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x4zu438k7evsdwgcaua0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EcsnUWDk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x4zu438k7evsdwgcaua0.png" alt="Array com 1 elemento" width="682" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exemplo de um array com 5 elementos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TIOXkr2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ti76xbmyl00pu0v9qpwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TIOXkr2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ti76xbmyl00pu0v9qpwf.png" alt="Array com 5 elementos" width="397" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Linked List
&lt;/h2&gt;

&lt;p&gt;Linked list em português significa "lista ligada", basicamente esta estrutura de dados é uma lista onde cada elemento aponta para o próximo elemento e também pode apontar para o elemento anterior, isso significa que, diferente de arrays, os dados são armazenados de forma não contígua na memória, permitindo que modifiquemos o tamanho da lista.&lt;/p&gt;

&lt;p&gt;Cada elemento pode ser chamado de &lt;code&gt;node&lt;/code&gt; este &lt;code&gt;node&lt;/code&gt; contem um atributo &lt;code&gt;data&lt;/code&gt; para armazenar o valor e outro atributo para armazenar o endereço do próximo &lt;code&gt;node&lt;/code&gt; chamado &lt;code&gt;next&lt;/code&gt; e/ou do &lt;code&gt;node&lt;/code&gt; anterior &lt;code&gt;prev&lt;/code&gt;. Além disso temos também um atributo chamado &lt;code&gt;head&lt;/code&gt; este é responsável por armazenar uma referência para o primeiro &lt;code&gt;node&lt;/code&gt; da lista.&lt;/p&gt;

&lt;h3&gt;
  
  
  Singly Linked List
&lt;/h3&gt;

&lt;p&gt;Em uma singly linked list, cada &lt;code&gt;node&lt;/code&gt; possuí dois atributos, um deles é o valor que queremos armazenar na lista e o outro atributo é a referência ao próximo &lt;code&gt;node&lt;/code&gt; da lista.&lt;/p&gt;

&lt;p&gt;Em uma representação gráfica ele se parece com isso:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dtNHNNPy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tg85up92kkhv3y3hp150.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dtNHNNPy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tg85up92kkhv3y3hp150.png" alt="Singly Node" width="800" height="84"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui está um exemplo de uma singly linked list, com letras de 'A' até 'E' (poderia ser uma lista de compras, uma lista de livros, etc. Foi colocado letras para facilitar o exemplo). Nesse tipo de linked list o último &lt;code&gt;node&lt;/code&gt; aponta para &lt;code&gt;null&lt;/code&gt;, pois não tem nenhum outro valor após ele.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8ebxe5h---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lrhtsbmc2lpwsbf295eo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8ebxe5h---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lrhtsbmc2lpwsbf295eo.png" alt="Singly Linked List" width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Implementação
&lt;/h4&gt;

&lt;p&gt;Principais métodos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;add(data)&lt;/code&gt; - Para adicionar um elemento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;remove(data)&lt;/code&gt; - Para remover um elemento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get(data)&lt;/code&gt; - Retorna &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; caso encontre ou não o elemento.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="cm"&gt;/*
    Exemplo totalmente manual, o certo é
    criar os métodos básicos para que
    tudo fique dinâmico.
*/&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SinglyLinkedList&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Crio os nodes.&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"c"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Coloco eles em ordem.&lt;/span&gt;
        &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// Crio a lista e adiciono o primeiro elemento no head.&lt;/span&gt;
        &lt;span class="nc"&gt;SinglyLinkedList&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SinglyLinkedList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Circular Singly Linked List
&lt;/h3&gt;

&lt;p&gt;Este tipo de linked list é basicamente uma singly linked list só que com uma diferença, o último &lt;code&gt;node&lt;/code&gt; em vez de apontar para &lt;code&gt;null&lt;/code&gt;, ele aponta para o primeiro elemento da lista, por isso o nome "circular".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gXA8PHkB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9e9yjx8isnovo4lr29ov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gXA8PHkB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9e9yjx8isnovo4lr29ov.png" alt="Circular Singly Linked List" width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Implementação
&lt;/h4&gt;

&lt;p&gt;Principais métodos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;add(data)&lt;/code&gt; - Para adicionar um elemento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;remove(data)&lt;/code&gt; - Para remover um elemento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get(data)&lt;/code&gt; - Retorna &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; caso encontre ou não o elemento.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="cm"&gt;/*
    Exemplo totalmente manual, o certo é
    criar os métodos básicos para que
    tudo fique dinâmico.
*/&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CircularSinglyLinkedList&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Crio os nodes.&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"c"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Coloco eles em ordem.&lt;/span&gt;
        &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Note que este último node aponta para o primeiro.&lt;/span&gt;

        &lt;span class="c1"&gt;// Crio a lista e adiciono o primeiro elemento no head.&lt;/span&gt;
        &lt;span class="nc"&gt;CircularSinglyLinkedList&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CircularSinglyLinkedList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Doubly Linked List
&lt;/h3&gt;

&lt;p&gt;Nesse tipo de linked list além de termos um campo &lt;code&gt;next&lt;/code&gt; que aponta para o próximo &lt;code&gt;node&lt;/code&gt;, também temos um campo &lt;code&gt;prev&lt;/code&gt; que aponta para o &lt;code&gt;node&lt;/code&gt; anterior. O último &lt;code&gt;node&lt;/code&gt; aponta para &lt;code&gt;null&lt;/code&gt; como próximo &lt;code&gt;node&lt;/code&gt; e o primeiro &lt;code&gt;node&lt;/code&gt; da lista aponta para &lt;code&gt;null&lt;/code&gt; como &lt;code&gt;node&lt;/code&gt; anterior.&lt;/p&gt;

&lt;p&gt;Exemplo do &lt;code&gt;node&lt;/code&gt; de uma doubly linked list:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UNjwhS_l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7abcmmb4qawmdbk5jk9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UNjwhS_l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7abcmmb4qawmdbk5jk9x.png" alt="Doubly Node" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exemplo de uma doubly linked list com os elementos:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OZd4WwBa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jzj5h064shcq04ak0nb6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OZd4WwBa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jzj5h064shcq04ak0nb6.png" alt="Doubly Linked List" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Implementação
&lt;/h4&gt;

&lt;p&gt;Principais métodos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;add(data)&lt;/code&gt; - Para adicionar um elemento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;remove(data)&lt;/code&gt; - Para remover um elemento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get(data)&lt;/code&gt; - Retorna &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; caso encontre ou não o elemento.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="cm"&gt;/*
    Exemplo totalmente manual, o certo é
    criar os métodos básicos para que
    tudo fique dinâmico.
*/&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DoublyLinkedList&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Crio os nodes.&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"c"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Coloco eles em ordem.&lt;/span&gt;
        &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// Crio a lista e adiciono o primeiro elemento no head.&lt;/span&gt;
        &lt;span class="nc"&gt;DoublyLinkedList&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DoublyLinkedList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Circular Doubly Linked List
&lt;/h3&gt;

&lt;p&gt;Aqui o funcionamento é como a circular singly linked list, mas como estamos falando de um circular doubly linked list vamos ter o campo &lt;code&gt;prev&lt;/code&gt;. O primeiro elemento aponta para o último elemento da lista no campo &lt;code&gt;prev&lt;/code&gt; e o último elemento da lista aponta para o primeiro elemento de lista no campo &lt;code&gt;next&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y4qK5Acc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ff8qwe6cb4382s0f6yv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y4qK5Acc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ff8qwe6cb4382s0f6yv1.png" alt="Circular Doubly Linked List" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Implementação
&lt;/h4&gt;

&lt;p&gt;Principais métodos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;add(data)&lt;/code&gt; - Para adicionar um elemento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;remove(data)&lt;/code&gt; - Para remover um elemento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get(data)&lt;/code&gt; - Retorna &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; caso encontre ou não o elemento.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="cm"&gt;/*
    Exemplo totalmente manual, o certo é
    criar os métodos básicos para que
    tudo fique dinâmico.
*/&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CircularDoublyLinkedList&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Crio os nodes.&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"c"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Coloco eles em ordem.&lt;/span&gt;
        &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Note que este primeiro node aponta (prev) para o último.&lt;/span&gt;
        &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Note que este último node aponta (next) para o primeiro.&lt;/span&gt;

        &lt;span class="c1"&gt;// Crio a lista e adiciono o primeiro elemento no head.&lt;/span&gt;
        &lt;span class="nc"&gt;CircularDoublyLinkedList&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CircularDoublyLinkedList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;Stack em português significa "pilha", imagine essa estrutura de dados como uma pilha de livros ou como uma pilha de pratos. Essa Estrutura de Dados tem um princípio chamado de LIFO (Last In First Out/Último a Entrar Primeiro a Sair).&lt;/p&gt;

&lt;p&gt;Vamos com um exemplo simples, imagine que estamos lavando pratos e a medida que os pratos são lavados vamos empilhando eles, quando terminamos temos que guardá-los e aqui o princípio LIFO entra em ação, o último prato empilhado será o primeiro prato a sair.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementação
&lt;/h3&gt;

&lt;p&gt;Principais métodos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;push(data)&lt;/code&gt; - Para adicionar um elemento no topo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pop()&lt;/code&gt; - Para remover o elemento do top.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;isEmpty()&lt;/code&gt; - Para verificar se a stack está vazia.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;peek()&lt;/code&gt; - Retorna o elemento do topo da stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O funcionamento de uma Stack é da seguinte maneira: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nzCWZIAs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kveus49nuyovct5jmv3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nzCWZIAs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kveus49nuyovct5jmv3p.png" alt="Stack" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para implementar um Stack podemos usar dois tipos de abordagens em relação à forma de armazenamento dos dados, a primeira é utilizando um &lt;code&gt;node&lt;/code&gt; como em uma linked list para armazenar os dados com os ponteiros para os próximos elementos, a segunda forma é utilizando um array, tudo depende de como a Stack irá funcionar, caso ela precise mudar de tamanho a abordagem com &lt;code&gt;node&lt;/code&gt; vai funcionar melhor, caso não mude de tamanho, utilizando array vai funcionar muito bem.&lt;/p&gt;

&lt;p&gt;Um ponto importante é que caso utilize a abordagem utilizando &lt;code&gt;node&lt;/code&gt; em vez de termos um atributo &lt;code&gt;head&lt;/code&gt; como em uma linked list que aponta para o primeiro elemento da lista, vamos ter um chamado &lt;code&gt;top&lt;/code&gt; que irá apontar para o último elemento adicionado na pilha.&lt;/p&gt;

&lt;p&gt;Aqui está um exemplo de uma implementação utilizando &lt;code&gt;node&lt;/code&gt; com seu funcionamento totalmente manual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="cm"&gt;/*
    Exemplo totalmente manual, o certo é
    criar os métodos básicos para que
    tudo fique dinâmico.
*/&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Stack&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Crio 3 nodes.&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"c"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Coloco eles em ordem.&lt;/span&gt;
        &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// Crio a stack adicionando o último node no top.&lt;/span&gt;
        &lt;span class="nc"&gt;Stack&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;top&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Queue
&lt;/h2&gt;

&lt;p&gt;Queue em português significa "fila", você pode imaginar esta estrutura de dados como uma fila de pessoas para entrar em um show ou qualquer outra fila. Essa estrutura de dados segue princípio FIFO (First In First Out/Primeiro a Chegar Primeiro a Sair), ou seja, a primeira pessoa a entrar em uma fila será a primeira a sair dela.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementação
&lt;/h3&gt;

&lt;p&gt;Principais métodos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;enqueue(data)&lt;/code&gt; - Adiciona um elemento no final da fila.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dequeue()&lt;/code&gt; - Remove o primeiro elemento da fila.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;isEmpty()&lt;/code&gt; - Retorna &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; para caso a fila esteja vazia ou não.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O funcionamento de uma queue é da seguinte maneira:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nDLmBDhy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5bohoc7j2gkvuryr72g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nDLmBDhy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5bohoc7j2gkvuryr72g.png" alt="Queue" width="800" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para implementar uma queue podemos usar duas abordagens para a foram de armazenamento dos dados, uma utilizando &lt;code&gt;node&lt;/code&gt; para os elementos assim como em uma linked list ou podemos fazer a implementação utilizando array. Caso sua queue mude de tamanho pode ser mais interessante implementar utilizando &lt;code&gt;node&lt;/code&gt;, mas caso não mude de tamanho, com array vai se sair muito bem.&lt;/p&gt;

&lt;p&gt;Para implementar utilizando &lt;code&gt;node&lt;/code&gt;vamos ter dois atributos importantes, o &lt;code&gt;front&lt;/code&gt; que aponta para o primeiro elemento da fila e o &lt;code&gt;rear&lt;/code&gt; que aponta para o último elemento da fila. Aqui está um exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="cm"&gt;/*
    Exemplo totalmente manual, o certo é
    criar os métodos básicos para que
    tudo fique dinâmico.
*/&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Queue&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;front&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;rear&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Crio 3 nodes.&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"c"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Coloco eles em ordem.&lt;/span&gt;
        &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// Crio a stack.&lt;/span&gt;
        &lt;span class="nc"&gt;Queue&lt;/span&gt; &lt;span class="n"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;front&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Adiciono o primeiro node no front.&lt;/span&gt;
        &lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;rear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node3&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Adiciono o último node no front.&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Nesse artigo vimos o que são estrutura de dados e alguns dos principais tipos, um ponto importante é que as implementações estão totalmente de forma manual, isto é, temos que criar cada &lt;code&gt;node&lt;/code&gt; (nos tipos de precisam) e dependendo da quantidade de dados isso se torna inviável. O correto é criar métodos que vão automatizar todo o processo da criação da estrutura de dados e métodos para adicionar, remover, alterar, etc.&lt;/p&gt;

</description>
      <category>datastructures</category>
      <category>java</category>
      <category>algorithms</category>
    </item>
  </channel>
</rss>
