cleosilva / estruturas-dados-javascript

Estrutura de dados e algoritmos implementados em Javascript com explicações e links para leitura adicional

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Estrutura de dados em JavaScript

  • StackArray: classe Stack baseada em array. As pilhas obedecem ao princípio de LIFO(Last In First Out, isto é, o último a entrar é o primeiro a sair). A adição de novos itens ou a remoção de itens existentes ocorrem na mesma extremidade.

  • Stack: classe Stack baseada em objeto. Ao trabalhar com um conjunto de dados devemos analisar qual tipo de pilha iremos utilizar. Trabalhar com pilhas baseadas em array é mais fácil, porém se array tiver um volume grande de dados demorará mais para iterar pelos elementos. Desse modo, podemos criar uma estrutura de pilhas usando um objeto, e assim, acessar diretamente o elemento, usando menos memória.

  • Queue: uma fila é coleção ordenada de itens baseada em FIFO(First In FirstOut, isto é, o primeiro que entra é o primeiro que sai). A adição de novos elementos de uma fila é feita na cauda (tail) e a remoção na frente.

  • Deque: a estrutura de dados de deque, também conhecida com filas de duas pontas(double-ended queue), é uma fila especial que nos permite inserir e remover elementos do final ou da frente da fila.

  • LinkedList: os arrays são a estrutura de dados mais utilizadas para armazenar elementos, No entanto, ela apresenta algumas desvantagens: o tamanho do array é fixo em algumas linguagens e inserir ou remover elementos no início ou no meio do array, é custoso, pois os elementos têm de sofrer um deslocamento(apesar de JavaScript ter métodos que farão isso, é isso que acontece internamente também). As listas ligadas armazenam uma coleção sequencial de elementos; no entanto, de modo diferente dos arrays, nas listas ligadas os elementos não são posicionados de forma contínua na memória. Cada elemento é constituído de um nó que armazena o elemento, além de uma referência(também conhecido como ponteiro ou ligação) que aponta para o próprio elemento. Uma das vantagens da lista ligada em relação ao array é que não é necessário deslocar os elementos quando eles são adicionados ou removidos.

  • DoublyLinkedList: a diferença entre uma lista duplamente ligada e uma lista ligada comum é que, nessa última, fazemos ligação somente de um nó para o próximo, enquanto, em uma lista duplamente ligada, temos uma ligação dupla: uma para o próximo elemento e outra para o elemento anterior.

  • Set: Um conjunto(set) é uma coleção não ordenada de itens, composta de elementos únicos (isto é, não podem ser repetidos). Essa estrutura usa o mesmo conceito matemático dos conjuntos finitos, porém aplicados a uma estrutura de dados em ciência da computação. Podemos pensar também em conjuntos como um array sem elementos repetidos e sem o conceito de ordem.

  • Dictionary: Um dicionário é usado para armazenar pares [chave, valor], em que a chave pode ser usada para encontrar um elemento em particular.

  • HashTable: O hashing consiste em encontrar um valor em uma estrutura de dados o mais rápido possível. Quando usamos uma função de hash, já sabemos em que posição o valor se encontra, portanto, podemos simplesmente o acessar. Uma função de hash é uma função que, dada uma key, devolve o endereço em que o valor está na tabela. Dictionary Vs HashTable: As duas classes são muito parecidas. A diferença está no fato de que, na classe Dictionary, armazenamos o Value Pair na propriedade key de table (depois de ter sido transformada em string); na classe HashTable, geramos um número a partir da key (hash) e armazenamos o ValuePair na posição (ou propriedade) hash. Tratando colisões da HashTable:
    • Separate Chaining: consiste em criar uma lista ligada para cada posição da tabela e armazenar os elementos. É a técnica mais simples, no entanto, ela exige memória extra, além daquela ocupada pela instância de HashTable.
    • Linear Sondagem: É chamada linear porque a colisão é tratada de modo que os valores serão armazenados diretamente na tabela, e não em uma estrutura de dados separada. Ao adicionar um elemento se a position estiver ocupada iteramos adicionando position + 1 até que uma posição livre seja encontrada.

  • Tree (Árvore): Estrutura de dados não sequencial muito útil para armazenar informações que devam ser encontradas facilmente.
    • BinarySearchTree: Uma árvore binária de busca é uma árvore que permite armazenar somente nós com valores menores do lado esquerdo e nós com valores maiores do lado direito.

Como usar este repositório

Clone o projeto

git clone https://github.com/cleosilva/estruturas-dados-javascript.git

Instale as dependências

cd estruturas-dados-javascript
npm install

Após instalar as dependências você poderá instanciar e testar as estruturas no arquivo index.js

Referências:

Em contrução 🚧

About

Estrutura de dados e algoritmos implementados em Javascript com explicações e links para leitura adicional


Languages

Language:JavaScript 100.0%