DEV Community

Cover image for 5 principais estruturas de dados
Ana Clara
Ana Clara

Posted on

6

5 principais estruturas de dados

O que são estruturas de dados?

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.

  • Estruturas de dados abstratas são conceitos ou modelos que descrevem como os dados podem ser organizados e manipulados.

  • Estruturas de dados concretas são as implementações reais dessas abstrações, que determinam a eficiência e a forma de armazenamento e manipulação dos dados.

Estruturas de dados básicas

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.

Arrays
array

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.

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.

Quando usar:

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

Vantagens:

  • Acesso direto aos elementos e eficiente em termos de memória se o tamanho for fixo.

Desvantagens:

  • 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)).

Aplique o seu conhecimento!

Listas Encadeadas (Linked Lists)
lista encadeada

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

O primeiro elemento da lista encadeada é chamado de cabeça e a lista é acessada começando por este nó.

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

Quando usar:

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

Vantagens:

  • Inserção e remoção são eficientes (O(1)) nas extremidades.

Desvantagens:

  • Acesso aos elementos é mais lento (O(n)) em comparação com arrays, pois você precisa percorrer os nós.

Aplique o seu conhecimento!

Filas
fila

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.

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.

Quando usar:

  • Quando você precisa processar os dados em ordem de chegada.
  • Ideal para sistemas de espera, processamento de tarefas assíncronas ou buffer de dados.

Vantagens:

  • Operações de inserção e remoção são rápidas (O(1)) nas extremidades.

Desvantagens:

  • Acesso direto aos elementos intermediários é raro e custoso (O(n)).

Aplique o seu conhecimento!

Pilhas
pilha

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).

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:

  • Push: Inserir um elemento no topo da pilha.
  • Pop: Remover e retornar o elemento do topo da pilha.
  • Peek (ou Top): Verificar o elemento no topo da pilha sem o remover.

Quando usar:

  • Para problemas onde a ordem inversa dos elementos importa.
  • Usado em algoritmos de recursão, backtracking, gerenciamento de chamadas de função (call stack).

Vantagens:

  • Inserções e remoções no topo da pilha são rápidas (O(1)).

Desvantagens:

  • Sem acesso direto a elementos que não estão no topo.

Aplique o seu conhecimento!

Tabelas Hash
tabela hash

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 colisão. É possível tratar essa situação com duas abordagens comuns, o encadeamento e o endereçamento aberto. 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.

Quando usar:

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

Vantagens:

  • Busca extremamente eficiente quando a função hash é bem definida.

Desvantagens:

  • 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.

Aplique o seu conhecimento!

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more