A Necessidade de Estruturas de Dados

A necessidade de estrutura de dados

caaalango
5 min readDec 22, 2023

Wise men say
Only fools rush in
But I can’t help
Falling in love with you

(Can’t Help Falling In Love — Elvis Presley)

Sumário

  • Definição e Importância das Estruturas de Dados
  • Exemplos de Estruturas de Dados
  • Desafios para Estrutura de Dados
  • Conclusão
Representação artística da estrutura de dados

Definição e Importância das Estruturas de Dados

Estruturas de dados são como os alicerces de um edifício na computação. Assim como um bom alicerce sustenta um prédio, as estruturas de dados apoiam o processamento e a organização eficientes dos dados. São essenciais para a criação de programas eficazes e ajudam a gerenciar e organizar os dados de forma que possam ser usados eficientemente. Você verá que impossível não se apaixonar por elas.

Imagine um armazém com prateleiras, caixas e etiquetas. Cada item armazenado tem um lugar específico e um método de identificação. Da mesma forma, estruturas de dados organizam e mantêm dados de forma que possam ser acessados, manipulados e armazenados de maneira eficiente. Diversas vezes permitindo o desenvolvimento de algoritmos importante na computação e ajudando na resolução de problemas. Ou seja, de forma resumida é como se você escolhesse organizar os dados de uma determinada maneira, como se fosse um “layout”.

Estruturas de dados permite que escalabilidade de diversos algoritmos e sistemas de computação e ajuda a melhorar o desempenho, pois com a ferramenta certa o trabalho de desenvolvimento pode ser realizado da maneira correta.

Uma comparação que pode-se fazer acerca das estruturas de dados é que podem ser vistas como diferentes ferramentas em uma caixa de ferramentas, cada uma com seu uso específico, ou seja, possuímos alguns tipos e cada um com a sua peculiaridade e momento de ser usada.

Exemplos de Estruturas de Dados

Como foi dito, vamos pensar em estruturas de dados como ferramentas a serem usadas. Algumas dessas ferramentas são:

  • Arrays: São como itens numerados em ordem em uma prateleira (memória) e acessa-os diretamente pela posição que ela ocupa na fileira. Perceba que os elementos são armazenados em regiões consecultivas de memória. Veja um exemplo da declaração de array de inteiros em Go:
var numeros [4]int
Representação Didática do Array Criado.
  • Listas Encadeadas: São como um trem de brinquedo, onde cada vagão (nó) está ligado ao próximo, facilitando adicionar ou remover vagões. O dado(vagão) sempre aponta para o seu seguinte, mas eles estão em lugares não consecutivos de memória, é assim que funciona uma lista encadeada, isso facilita a remoção e o seu tamanho não precisa ser estático como um Array, pois sempre temos informação do seu vizinho. Diferente do array, para acessar o “vagão” 4, por exemplo, temos que passar pelo vagão 0, 1, 2 e 3, necessariamente. Portanto, o acesso aos elementos se torna mais lento do que no array.
  • Pilhas: Funciona basicamente como uma pilha de pratos você só podemos adicionar ou remover o prato do topo. (Last In, first Out — Último a entrar, primeiro a sair). É a estrutura de dados utilizada internamente pelo computador para armazenar suas informações. Podemos verificar sua existência, por exemplo, quando ocorre um erro em linguagens de alto nível e nos aparece a pilha de chamada de funções.
  • Filas: São como uma fila no banco; o primeiro que chega é o primeiro a ser atendido (First In, First Out — Primeiro a entrar, primeiro a sair). Estrutura de dados implemementada dentro dos roteadores, visto que a prioridade é processar as primeiras requsições que entraram por aquele roteador..
  • Árvores: São como uma árvore genealógica, onde temos um ancestral (o nó raiz), e esse ancestral tem filhos, formando uma hierarquia. Essa estrutura de dados é muito utilizada dentro dos sistemas operacionais para discriminar arquivos. Já percebeu que uma pasta sempre pertence a outra? No final das contas, elas formam uma árvore. Veja uma representação de como é representado as pastas no seu sistema operacional.
Exemplo de um Sistema de Diretórios em Formato de Árvore.
  • Tabela Hash: São como catálogos, onde você pode encontrar rapidamente uma informação com base em uma chave. Ou seja, é uma estrutura de dados chamada de Key-Value, porque você possui uma chave e aquela chave está associada a um valor específico. Sua utilização é bastante quando desejamos buscar rapidamente algum elemento de um conjunto de dados. Vamos representar como podemos usar essa estrutura de dados em Go.
func main() {
// Criando um map para armazenar idades e a chave é o nome da pessoa
idades := make(map[string]int)

// Atribuindo valores ao map
idades["Eliabe"] = 27
idades["gabriel"] = 20
idades["Ruslanna"] = 18

// Acessando e imprimindo um valor
fmt.Println("Idade de Ruslanna:", idades["Ruslanna"])

// Iterando sobre o map
for nome, idade := range idades {
fmt.Printf("%s tem %d anos\n", nome, idade)
}
}
Representação Simplificada de uma Tabela Hash.

Além disso, vê-se que ele não ficou na ordem que foi preenchido, isso é comum de acontecer, porque a tabela Hash geralmente não possui uma ordem.

  • Há outros tipos de estruturas de dados comuns, porém vamos especificando mais sobre elas a medida que fomos resolvendo mais problemas do NeetCode.

Desafios para Estrutura de Dados

A escolha da estrutura de dados certa em programação é crucial e pode ser comparada à escolha do equipamento certo para uma expedição. Cada decisão traz consigo uma série de prós e contras, e a escolha adequada depende de uma variedade de fatores.

Se escolhermos uma tabela hash para algum problema que exige uma ordenação é pedir para provavelmente escrever um algoritmo ineficiente, sendo que poderíamos ter outras soluções melhores. Porém se você precisa verificar a existência de um elemento, com certeza é mais interessante utilizar uma tabela hash, pois se, por exemplo, utilizassemos um Array teríamos que varrer completamente o Array e isso levaria mais tempo do que utilizar uma tabela hash que era basicamente verificar se a chave tem um valor associado a ela.

Esses são apenas alguns exemplos de como uma escolha correta da estrutura de dados para um determinado problema pode ser importante, como se fosse realmente fosse a chave de fenda certa para o tamanho do parafuso.

Conclusão

Em suma, estruturas de dados são a espinha dorsal da computação, essenciais para o armazenamento, manipulação e recuperação eficiente de diversos dados. Não há como construir um software eficiente sem pelo menos um conhecimento básico de estruturas de dados, são formas de se construir algoritmos importantes e resolver problemas cada vez mais difíceis.

Por Gabriel Palitot e revisado por Eliabe Bastos.

--

--