<?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: Ana Clara</title>
    <description>The latest articles on DEV Community by Ana Clara (@clarafonseca).</description>
    <link>https://dev.to/clarafonseca</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%2F1213879%2F50297058-9d7b-45e1-82fc-d3c29dbd3041.JPG</url>
      <title>DEV Community: Ana Clara</title>
      <link>https://dev.to/clarafonseca</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/clarafonseca"/>
    <language>en</language>
    <item>
      <title>How to avoid requests to inaccessible resources</title>
      <dc:creator>Ana Clara</dc:creator>
      <pubDate>Wed, 21 Aug 2024 13:35:40 +0000</pubDate>
      <link>https://dev.to/clarafonseca/how-to-avoid-requests-to-inaccessible-resources-49km</link>
      <guid>https://dev.to/clarafonseca/how-to-avoid-requests-to-inaccessible-resources-49km</guid>
      <description>&lt;p&gt;The &lt;code&gt;404 Not Found&lt;/code&gt; error indicates that the server was unable to find the requested resource. For the browser, this means that the URL is not recognized. &lt;/p&gt;

&lt;p&gt;404 requests cause frustration for the user and can lead to poor website performance. In addition, search engines crawl and index non-existent pages and, consequently, the website's ranking is negatively impacted. All in all, we can avoid searches for inaccessible requests by using a few methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Check links regularly&lt;/strong&gt;&lt;br&gt;
It may seem trivial, but the most common causes of 404 errors are pages that have been moved or deleted and incorrectly typed URLs. For this reason, you can use free tools such as &lt;a href="https://search.google.com/search-console/about" rel="noopener noreferrer"&gt;Google Search Console&lt;/a&gt; and &lt;a href="https://www.screamingfrog.co.uk/seo-spider/" rel="noopener noreferrer"&gt;Screaming Frog SEO Spider&lt;/a&gt; to validate broken links and &lt;em&gt;Soft 404s&lt;/em&gt; (&lt;em&gt;non-existent resources that still return a success status of 200&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Validating URLs&lt;/strong&gt;&lt;br&gt;
Before making the request, validate that the URL is correct. Although this doesn't guarantee that the requested resource doesn't exist, it can prevent obvious errors. To validate a URL, there is Javascript's &lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/API/URL" rel="noopener noreferrer"&gt;URL&lt;/a&gt; interface. Here you can validate the structure of the URL, the protocol, domain or extension of the requested file.&lt;/p&gt;

&lt;p&gt;You can also check the existence of a resource before making a &lt;code&gt;GET&lt;/code&gt; request using the &lt;code&gt;HEAD&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function fileExists(url) {
  try {
    const response = await fetch(url, { method: 'HEAD' });
    return response.ok;
  } catch (error) {
    console.error('Error verifying the existence of the file:', error);
    return false;
  }
}

fileExists('https://example.com/file.jpg').then(exists =&amp;gt; {
  if (exists) {
    console.log('File exists.');
  } else {
    console.log('File not found.');
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Evaluate the site's restrictions&lt;/strong&gt;&lt;br&gt;
Don't forget to check that HTML, CSS, JavaScript files and other resources have the correct read and execute permissions for users. Also check that there are no undue access restrictions in the web server settings that could prevent access to certain files or directories. &lt;/p&gt;

&lt;p&gt;Settings such as &lt;code&gt;AllowOverride&lt;/code&gt; and &lt;code&gt;Require all granted&lt;/code&gt; can cause problems if they are not correctly configured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Clear the cache&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The cache stores copies of website resources so that when you visit the same site again, the browser can load these resources more quickly. However, if a website resource returns a 404 error, this response can also be stored in the cache. So, even if this resource is corrected on the server, the user may still receive the 404 error. To solve this problem, we can work on the configuration of the HTTP header.&lt;/p&gt;

&lt;p&gt;You can set &lt;code&gt;Cache-control: no-store&lt;/code&gt; to prevent a response from being stored, or &lt;code&gt;Cache-Control: no-cache&lt;/code&gt; to force the browser to check with the server before using a cached version. You can also configure the &lt;code&gt;Expires&lt;/code&gt; header with the time at which the response will expire. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. If the resource is missing, deal with it gracefully&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of letting the user encounter a 404 error, set up redirects to alternative pages with the error and suggest other services. Also, if a service has been moved or renamed, set up a 301 (permanent) or 302 (temporary) redirect to the new URL. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
404 errors negatively impact the user experience and the credibility of your application and SEO. As a dev, by handling 404 errors gracefully, you demonstrate a commitment to quality and usability, which strengthens customers' confidence in your work and the product you are developing. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>performance</category>
    </item>
    <item>
      <title>Como evitar requisições a recursos inacessíveis</title>
      <dc:creator>Ana Clara</dc:creator>
      <pubDate>Wed, 21 Aug 2024 12:29:38 +0000</pubDate>
      <link>https://dev.to/clarafonseca/como-evitar-requisicoes-a-recursos-inacessiveis-2ec</link>
      <guid>https://dev.to/clarafonseca/como-evitar-requisicoes-a-recursos-inacessiveis-2ec</guid>
      <description>&lt;p&gt;O erro &lt;code&gt;404 Not Found&lt;/code&gt; indica que o servidor não conseguiu encontrar o recurso solicitado. Para o navegador, isso significa que a URL não é reconhecida. &lt;/p&gt;

&lt;p&gt;Requisições 404 provocam frustração ao usuário e podem levar a mau desempenho do website. Além disso, as ferramentas de busca rastreiam e indexam páginas inexistentes e, consequentemente, o ranqueamento do website é impactado negativamente. Com tudo, podemos evitar buscas por requisições inacessíveis usando alguns métodos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Verificar regularmente os links&lt;/strong&gt;&lt;br&gt;
Pode parecer trivial, mas as causas mais comuns para erros 404 são páginas que foram movidas ou deletadas e URLs digitadas incorretamente. Por isso, você pode utilizar ferramentas gratuitas como &lt;a href="https://search.google.com/search-console/about" rel="noopener noreferrer"&gt;Google Search Console&lt;/a&gt; e &lt;a href="https://www.screamingfrog.co.uk/seo-spider/" rel="noopener noreferrer"&gt;Screaming Frog SEO Spider&lt;/a&gt; para validar links quebrados e &lt;em&gt;Soft 404s&lt;/em&gt; (&lt;em&gt;recursos não existentes que ainda sim retornam um status de sucesso 200&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Validar URLs&lt;/strong&gt;&lt;br&gt;
Antes de fazer a requisição, valide se a URL é correta. Mesmo que isso não garanta que o recurso solicitado não exista, pode prevenir erros óbvios. Para validar uma URL, existe a interface &lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/API/URL" rel="noopener noreferrer"&gt;URL&lt;/a&gt; do Javascript. Nela é possível validar a estrutura da URL, o protocolo, domínio ou extensão do arquivo requisitado.&lt;/p&gt;

&lt;p&gt;Ademais, pode ser feita a verificação da existência de um recurso antes de fazer uma requisição &lt;code&gt;GET&lt;/code&gt; utilizando o método &lt;code&gt;HEAD&lt;/code&gt;. Ele retorna apenas os cabeçalhos, sem o corpo da resposta, o que permite saber se o recurso existe sem o baixar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function fileExists(url) {
  try {
    const response = await fetch(url, { method: 'HEAD' });
    return response.ok;
  } catch (error) {
    console.error('Erro ao verificar a existência do arquivo:', error);
    return false;
  }
}

fileExists('https://example.com/file.jpg').then(exists =&amp;gt; {
  if (exists) {
    console.log('Arquivo existe.');
  } else {
    console.log('Arquivo não encontrado.');
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Avalie as restrições do site&lt;/strong&gt;&lt;br&gt;
Não se esqueça de verificar se os arquivos HTML, CSS, JavaScript e outros recursos tenham permissões de leitura e execução corretas para os usuários. Também verifique se não há restrições de acesso indevidas nas configurações do servidor web que possam impedir o acesso a determinados arquivos ou diretórios. &lt;/p&gt;

&lt;p&gt;Configurações como &lt;code&gt;AllowOverride&lt;/code&gt; e &lt;code&gt;Require all granted&lt;/code&gt; podem causar problemas se não estiverem corretamente configuradas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Limpe o cache&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O cache armazena cópias de recursos do site para que, ao visitar o mesmo site novamente, o navegador possa carregar esses recursos mais rapidamente. Entretanto, se o recurso de um site retorna o erro 404, essa resposta também pode ser armazenada no cache. Então, mesmo que esse recurso seja corrigido no servidor, o usuário ainda pode receber o erro 404. Para resolver esse problema, podemos trabalhar a configuração do cabeçalho HTTP.&lt;/p&gt;

&lt;p&gt;Você pode definir &lt;code&gt;Cache-control: no-store&lt;/code&gt; para impedir que uma resposta seja armazenada, ou &lt;code&gt;Cache-Control: no-cache&lt;/code&gt; para forçar o navegador a verificar com o servidor antes de usar uma versão do cache. Você também pode configurar o cabeçalho &lt;code&gt;Expires&lt;/code&gt; com o tempo na qual a resposta será expirada. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Se o recurso está ausente, lide com isso graciosamente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ao invés de deixar o usuário encontrar um erro 404, configure redirecionamentos para páginas alternativas com o erro e sugira outros serviços. Além disso, caso um serviço tenha sido movido ou renomeado, configure um redirecionamento 301 (permanente) ou 302 (temporário) para a nova URL. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;br&gt;
Erros 404 impactam negativamente a experiência do usuário e a credibilidade da sua aplicação e o SEO. Como dev, ao lidar graciosamente com erros 404, você demonstra compromisso com a qualidade e a usabilidade, o que fortalece a confiança dos clientes no seu trabalho e no produto que você está desenvolvendo. &lt;/p&gt;

</description>
      <category>frontend</category>
      <category>performance</category>
      <category>webdev</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>5 principais estruturas de dados</title>
      <dc:creator>Ana Clara</dc:creator>
      <pubDate>Fri, 16 Aug 2024 19:31:18 +0000</pubDate>
      <link>https://dev.to/clarafonseca/5-principais-estruturas-de-dados-5028</link>
      <guid>https://dev.to/clarafonseca/5-principais-estruturas-de-dados-5028</guid>
      <description>&lt;p&gt;&lt;strong&gt;O que são estruturas de dados?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma estrutura de dados é uma solução para organizar informações, permitindo tanto o armazenamento quanto a recuperação de itens. Elas podem ser classificadas como abstratas ou concretas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Estruturas de dados abstratas&lt;/strong&gt; são conceitos ou modelos que descrevem como os dados podem ser organizados e manipulados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Estruturas de dados concretas&lt;/strong&gt; são as implementações reais dessas abstrações, que determinam a eficiência e a forma de armazenamento e manipulação dos dados.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Estruturas de dados básicas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Existem diversas estruturas de dados, cada uma com um propósito específico e ideal para diferentes cenários de implementação. Neste post, vou apresentar cinco delas: Arrays, Listas Encadeadas (Linked Lists), Filas, Pilhas e Tabelas Hash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arrays&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42jnmzjak81i98t79ynk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42jnmzjak81i98t79ynk.jpg" alt="array" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um array é uma estrutura de dados linear que armazena e organiza elementos em posições sequenciais. Ao declarar um array, é necessário especificar o número de elementos que ele armazenará, pois o array aloca um bloco contínuo de memória para armazenar esses dados. &lt;/p&gt;

&lt;p&gt;Dessa forma, é possivel recuperar um elemento pelo seu índice numérico, que indica a posição do elemento dentro do array. Os índices geralmente começam em zero, o que significa que o primeiro elemento está no índice 0, o segundo no índice 1, e assim por diante.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se você precisa de acesso rápido aos elementos por índice (tempo constante O(1)).&lt;/li&gt;
&lt;li&gt;Quando o tamanho dos dados é conhecido e fixo ou não mudará com frequência.&lt;/li&gt;
&lt;li&gt;Para armazenar uma coleção de elementos homogêneos (como inteiros, strings).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vantagens:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesso direto aos elementos e eficiente em termos de memória se o tamanho for fixo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redimensionar arrays dinâmicos pode ser custoso. Operações de inserção e remoção no início ou no meio do array são lentas (O(n)).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://leetcode.com/tag/array/" rel="noopener noreferrer"&gt;Aplique o seu conhecimento!&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listas Encadeadas (Linked Lists)&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8oz2ho1tm8945ehcnjh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8oz2ho1tm8945ehcnjh.jpg" alt="lista encadeada" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma lista encadeada armazena uma sequência de elementos, onde cada elemento é um &lt;strong&gt;nó&lt;/strong&gt; que contém dois componentes principais: seu &lt;strong&gt;dado&lt;/strong&gt; (informação que o nó armazena) e um &lt;strong&gt;ponteiro&lt;/strong&gt; (referência ao próximo nó na lista. Se for o último nó, essa referência será nula, indicando o final da lista.).&lt;/p&gt;

&lt;p&gt;O primeiro elemento da lista encadeada é chamado de &lt;strong&gt;cabeça&lt;/strong&gt; e a lista é acessada começando por este nó.&lt;/p&gt;

&lt;p&gt;Além do tipo de lista encadeada explicada acima, existe a &lt;strong&gt;lista duplamente encadeada,&lt;/strong&gt; nela além da o ponteiro que aponta para o nó seguinte, existe também a referência ao nó anterior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quando o tamanho dos dados é dinâmico e você precisa de uma estrutura que possa crescer ou diminuir com frequência.&lt;/li&gt;
&lt;li&gt;Se as inserções e remoções no início ou no meio da lista são comuns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vantagens:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inserção e remoção são eficientes (O(1)) nas extremidades.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesso aos elementos é mais lento (O(n)) em comparação com arrays, pois você precisa percorrer os nós.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://leetcode.com/tag/linked-list/" rel="noopener noreferrer"&gt;Aplique o seu conhecimento!&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filas&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ze3s99yjmavy847fxj4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ze3s99yjmavy847fxj4.jpg" alt="fila" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A ideia dessa estrutura de dados é bem intuitiva. Ela segue o princípio FIFO (First In, First Out), ou seja, o primeiro elemento inserido na fila será o primeiro a ser removido, como em uma fila de supermercado.&lt;/p&gt;

&lt;p&gt;Nela, o acesso aos elementos é restrito as duas extremidades, você só pode acessar o elemento da frente (a cabeça) para remoção ou no final (a cauda) para inserção.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quando você precisa processar os dados em ordem de chegada.&lt;/li&gt;
&lt;li&gt;Ideal para sistemas de espera, processamento de tarefas assíncronas ou buffer de dados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vantagens:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operações de inserção e remoção são rápidas (O(1)) nas extremidades.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesso direto aos elementos intermediários é raro e custoso (O(n)).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://leetcode.com/tag/queue/" rel="noopener noreferrer"&gt;Aplique o seu conhecimento!&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pilhas&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxnuq81vnd8zuivwt5bz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxnuq81vnd8zuivwt5bz.jpg" alt="pilha" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma pilha tem o comportamento semelhante a uma pilha de pratos: o último prato que você coloca no topo é o primeiro que você retira. Essa estrutura de dados linear pode seguir os princípios LIFO (Last In First Out) ou FILO (First In Last Out).&lt;/p&gt;

&lt;p&gt;Nela o acesso aos dados também é restrito, você só pode acessar os elementos através de uma das duas extremidades (cabeça ou calda), a depender do princípio aplicado (LIFO ou FILO). Na pilha são executadas três operações básicas: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Push&lt;/strong&gt;: Inserir um elemento no topo da pilha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pop&lt;/strong&gt;: Remover e retornar o elemento do topo da pilha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Peek (ou Top)&lt;/strong&gt;: Verificar o elemento no topo da pilha sem o remover.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para problemas onde a ordem inversa dos elementos importa.&lt;/li&gt;
&lt;li&gt;Usado em algoritmos de recursão, backtracking, gerenciamento de chamadas de função (call stack).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inserções e remoções no topo da pilha são rápidas (O(1)).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sem acesso direto a elementos que não estão no topo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://leetcode.com/tag/stack/" rel="noopener noreferrer"&gt;Aplique o seu conhecimento!&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tabelas Hash&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes33y6rk33uoslucd2gi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes33y6rk33uoslucd2gi.jpg" alt="tabela hash" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nessa estrutura de dados, para cada elemento é associado uma chave. Seu funcionamento se baseia em uma função hash, que é responsável por transformar uma chave em um índice, indicando a posição na tabela onde o valor associado àquela chave será armazenado. Entretanto, a função hash pode gerar o mesmo índice para diferentes chaves, causando uma &lt;strong&gt;colisão&lt;/strong&gt;. É possível tratar essa situação com duas abordagens comuns, o &lt;a href="https://youtu.be/4yvWw29SaHY?si=IjNiNKAQHxMercIT&amp;amp;t=193" rel="noopener noreferrer"&gt;encadeamento&lt;/a&gt; e o &lt;a href="https://edisciplinas.usp.br/pluginfile.php/2340743/mod_resource/content/1/ACH2002-Aula20-HashEnderecamentoAberto.pdf" rel="noopener noreferrer"&gt;endereçamento aberto&lt;/a&gt;. No encadeamento, cada posição da tabela contém uma lista de pares chave-valor, e se uma colisão ocorrer, o novo par é adicionado a essa lista. No endereçamento aberto, a tabela procura a próxima posição livre para armazenar o novo par, seguindo uma sequência predefinida.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se você precisa de acesso rápido a elementos por chave (tempo médio O(1) para buscas, inserções e deleções).&lt;/li&gt;
&lt;li&gt;Ideal para armazenamento de grandes conjuntos de dados quando o acesso por chave é frequente, como dicionários ou caches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vantagens:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Busca extremamente eficiente quando a função hash é bem definida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Colisões na tabela hash podem aumentar o tempo de operação. - Pode consumir mais memória devido ao overhead de armazenamento da função hash.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://leetcode.com/tag/hash-table/" rel="noopener noreferrer"&gt;Aplique o seu conhecimento!&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>algorithms</category>
      <category>datastructures</category>
      <category>computerscience</category>
    </item>
  </channel>
</rss>
