Skip to content

Instantly share code, notes, and snippets.

@reginadiana
Last active September 24, 2023 13:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save reginadiana/f6d7709bc2c73d886d3e3f0a310dac23 to your computer and use it in GitHub Desktop.
Save reginadiana/f6d7709bc2c73d886d3e3f0a310dac23 to your computer and use it in GitHub Desktop.
Anotações sobre Estruturas de Dados

As diversas formas em que os dados são organizados e agregados é chamado de estrutura de dados

Métodos das estruturas

  1. Inserir ou excluir elementos e;
  2. Buscar e localizá-los;
  3. Ordenar/classifica-los de acodo com determinada ordem

Caracteristicas

  1. Podem ser lineares (arrays) ou não lineares (grafos)
  2. Homogenea (toda estrutura possui o mesmo tipo) ou heterogenea (com tipos diferentes)
  3. Estáticos (possuem tamanho/capacidade de memória fixa) ou dinamica (podem expandir)

Arrays

Normalmente trabalhamos com apenas um tipo de dado, embora linguagens como o javascript permitam a mistura de vários tipos em um unico array.

Caracteristicas gerais

🎲 Na maior parte das linguagens, os arrays tem tamanho fixo

🎲 Todos os elementos ocupam espaço sequencial na memória

🎲 Inserir ou remover elementos do meio do array não é tão simples

🎲 Arrays são muito eficientes para acessar dados

🎲 Arrays não são muito eficientes quando falamos de memória, pois ao declararmos um com tamanho de 10 indexs por exemplo, por mais que preenchamos apenas 2 deles, o restante dos indexes ficarão reservados para que no futuro sejam preenchidos, por mais que isso possa não acontecer. Portanto, o ideal é utilizar os arrays quando sabemos a quantidade de dados que queremos guardar.

🎲 Adicionar e remover um elemento no final do array ao invés do inicio ou meio é menos custoso

Pilha

Podemos fazer uma associação com uma pilha de pratos ou livros. Se quisermos adicionar ou remover algum item, precisamos fazer isso de cima pra baixo, o que corresponde do final para o inicio quando falamos de dados. Essa estrutura é utilizada, por exemplo, na navegação do browser.

Fila

Tem semelhança com a pilha, porém podemos remover o tem do inicio da filha e adicionar ao final. Podemos pensar em uma fila de cinema, onde quem chegou primeiro, sai primeiro da fila, mas quem chega por ultimo, sai por ultimo dela.

Deque

É uma junção das estruturas pilha e fila, que aceita inserção e remoção de elementos tanto no inicio como no final.

Fila circular

Busca resolver uma limitação da fila linear, que é lidar com espaços vazios que podem se enfileirar após a retirada de elementos no inicio da fila.

Lista ligada

Utiliza ponteiros para "apontar" para o endereço de memoria mais próximo, sem que ele precise estar lá. Essa estrutura é bastante utilizada em alguns de fotos e playlists de musicas ou videos.

Conjuntos

São listas não ordenadas de elementos que não podem se repetir. no javascript, podemos instancia essa estrutura com new Set()

Dicionário

É uma estrutura que guarda dados pares de chave e valor. Podem ter performance melhor em buscas e manipulação de dados do que objetos, pois utilizam referencias para as chaves de forma similar aos ponteiros.

Arvore

É uma estrutura não sequencial, muito util para armazenar dados de forma hierarquica e que podem ser acessados de forma rápida, levando a uma maior eficiencia na manipulação de dados.

Heap Binário

É um tipo especial de árvore binária, normalmente utilizada em computação para implementar filas de prioridade, indexação de banco de dados e em algoritimo de ordenação heap sort.

Grafo

É uma estrutura não sequencial que forma uma rede que interliga todos os dados, sendo utilizada pelas consultas do GraphQL, sistemas de navegação (gsp/mapas) e algoritmo de caminho minimo para rotas.

Streams

É uma forma de representar uma sequencia de bits, como um array por exemplo, sem precisar armazenar na memoria, sendo muito util em desenvovimento com grande massa de dados.


Boas práticas para nomear variáveis

  • Um dos erros mais comuns é declarar um método que retorna mais ou menos do que ele promete.

  • A maneira com que escrevemos o código também pode gerar sobrecarga cognitiva

  • Se uma variável contém uma data, termine-a com _on, mas se tiver uma data com hora, termine-a com _at

  • Tome cuidado com code smells, pois eles podem dificultar a leitura do código.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment