MCPcopy
hub / github.com/amejiarosario/dsa.js-data-structures-algorithms-javascript

github.com/amejiarosario/dsa.js-data-structures-algorithms-javascript @2.7.6 sqlite

repository ↗ · DeepWiki ↗ · release 2.7.6 ↗
883 symbols 2,071 edges 342 files 443 documented · 50%
README

image

Data Structures and Algorithms in JavaScript

CircleCI NPM version chat

This is the coding implementations of the DSA.js book and the repo for the NPM package.

In this repository, you can find the implementation of algorithms and data structures in JavaScript. This material can be used as a reference manual for developers, or you can refresh specific topics before an interview. Also, you can find ideas to solve problems more efficiently.

Interactive Data Structures

Table of Contents

Installation

You can clone the repo or install the code from NPM:

npm install dsa.js

and then you can import it into your programs or CLI

const { LinkedList, Queue, Stack } = require('dsa.js');

For a list of all available data structures and algorithms, see index.js.

Features

Algorithms are an essential toolbox for every programmer.

You will need to mind algorithms runtime when you have to sort data, search for a value in a big dataset, transform data, scale your code to many users, to name a few. Algorithms are just the step you follow to solve a problem, while data structures are where you store the data for later manipulation. Both combined create programs.

Algorithms + Data Structures = Programs.

Most programming languages and libraries indeed provide implementations for basic data structures and algorithms. However, to make use of data structures properly, you have to know the tradeoffs to choose the best tool for the job.

This material is going to teach you to:

  • 🛠 Apply strategies to tackle algorithm questions. Never to get stuck again. Ace those interviews!
  • ✂️ Construct efficient algorithms. Learn how to break down problems into manageable pieces.
  • 🧠 Improve your problem-solving skills and become a well-rounded developer by understanding fundamental computer science concepts.
  • 🤓 Cover essential topics, such as big O time, data structures, and must-know algorithms. Implement 10+ data structures from scratch.

What's Inside

All the code and explanations are available on this repo. You can dig through the links and code examples from the (src folder). However, the inline code examples are not expanded (because of Github's asciidoc limitations), but you can follow the path and see the implementation.

Note: If you prefer to consume the information more linearly, then the book format would be more appropriate for you.

The topics are divided into four main categories, as you can see below:

📈 Algorithms Analysis

Computer Science nuggets without all the mumbo-jumbo. (Click to expand) --- ### [Computer Science nuggets without all the mumbo-jumbo](book/content/part01/algorithms-analysis.asc) #### Learn to calculate run time from code examples ![Translating lines of code to an approximate number of operations](book/images/image4.png) --- Learn how to compare algorithms using Big O notation. (Click to expand) --- ### [Learn how to compare algorithms using Big O notation.](book/content/part01/big-o-examples.asc#finding-if-an-array-is-empty) #### Comparing algorithms using Big O notation Let's say you want to find the duplicates on an array. Using Big O notation, we can compare different solutions that solve the same problem but has a massive difference in how long it takes to do it. - [Optimal solution using a map](book/content/part01/big-o-examples.asc#linear-example) - [Finding duplicates in an array (naïve approach)](book/content/part01/big-o-examples.asc#quadratic-example) --- 8 examples to explain with code how to calculate time complexity. (Click to expand) --- [8 examples to explain with code how to calculate time complexity](book/content/part01/big-o-examples.asc#summary) #### Most common time complexities [![image](https://user-images.githubusercontent.com/418605/59617342-2a715080-90f4-11e9-9de9-9315fb0133f9.png)](book/content/part01/big-o-examples.asc#summary) #### Time complexity graph ![Most common time complexities](book/images/image5.png) ---

🥞 Linear Data Structures

Understand the ins and outs of the most common data structures. (Click to expand) --- #### [Understand the ins and outs of the most common data structures](book/part02-linear-data-structures.asc) - [Arrays](book/content/part02/array.asc): Built-in in most languages so not implemented here. [Array Time complexity](book/content/part02/array.asc#array-complexity) - [Linked List](book/content/part02/linked-list.asc): each data node has a link to the next (and previous). [Code](src/data-structures/linked-lists/linked-list.js) | [Linked List Time Complexity](book/content/part02/linked-list.asc#linked-list-complexity-vs-array-complexity) - [Queue](book/content/part02/queue.asc): data flows in a "first-in, first-out" (FIFO) manner. [Code](src/data-structures/queues/queue.js) | [Queue Time Complexity](book/content/part02/queue.asc#queue-complexity) - [Stack](book/content/part02/stack.asc): data flows in a "last-in, first-out" (LIFO) manner. [Code](src/data-structures/stacks/stack.js) | [Stack Time Complexity](book/content/part02/stack.asc#stack-complexity) --- When to use an Array or Linked List. Know the tradeoffs. (Click to expand) --- #### [When to use an Array or Linked List. Know the tradeoffs](book/content/part02/array-vs-list-vs-queue-vs-stack.asc) Use Arrays when… - You need to access data in random order fast (using an index). - Your data is multi-dimensional (e.g., matrix, tensor). Use Linked Lists when: - You will access your data sequentially. - You want to save memory and only allocate memory as you need it. - You want constant time to remove/add from extremes of the list. - when size requirement is unknown - dynamic size advantage --- Build a List, Stack, and a Queue. (Click to expand) --- #### [Build a List, Stack and a Queue from scratch](book/part02-linear-data-structures.asc) Build any of these data structures from scratch: - [Linked List](src/data-structures/linked-lists/linked-list.js) - [Stack](src/data-structures/stacks/stack.js) - [Queue](src/data-structures/queues/queue.js) ---

🌲 Non-Linear Data Structures

Understand one of the most versatile data structure of all: Hash Maps. (Click to expand) --- #### [HashMaps](book/content/part03/map.asc) Learn how to implement different types of Maps such as: - [HashMap](book/content/part02/hash-map.asc) - [TreeMap](book/content/part03/tree-map.asc) Also, [learn the difference between the different Maps implementations](book/content/part03/time-complexity-graph-data-structures.asc): - `HashMap` is more time-efficient. A `TreeMap` is more space-efficient. - `TreeMap` search complexity is *O(log n)*, while an optimized `HashMap` is *O(1)* on average. - `HashMap`’s keys are in insertion order (or random depending on the implementation). `TreeMap`’s keys are always sorted. - `TreeMap` offers some statistical data for free such as: get minimum, get maximum, median, find ranges of keys. `HashMap` doesn’t. - `TreeMap` has a guarantee always an *O(log n)*, while `HashMap`s has an amortized time of *O(1)* but in the rare case of a rehash, it would take an *O(n)*. --- Know the properties of Graphs and Trees. (Click to expand) --- #### [Know the properties of Graphs and Trees](book/part03-graph-data-structures.asc) ##### [Graphs](book/content/part03/graph.asc) Know all the graphs properties with many images and illustrations. ![graph example with USA airports](book/images/image46.png) **Graphs**: data **nodes** that can have a connection or **edge** to zero or more adjacent nodes. Unlike trees, nodes can have multiple parents, loops. [Code](src/data-structures/graphs/graph.js) | [Graph Time Complexity](book/content/part03/graph.asc#graph-complexity) #### [Trees](book/content/part03/tree-intro.asc) Learn all the different kinds of trees and their properties. ![tree data structure properties](book/images/image31.jpg) - **Trees**: data nodes has zero or more adjacent nodes a.k.a. children. Each node can only have one parent node otherwise is a graph, not a tree. [Code](src/data-structures/trees) | [Docs](book/content/part03/tree-intro.asc) - **Binary Trees**: same as a tree but only can have two children at most. [Code](src/data-structures/trees) | [Docs](book/content/part03/tree-intro.asc#binary-tree) - **Binary Search Trees** (BST): same as a binary tree, but the nodes value keep this order `left < parent < right`. [Code](src/data-structures/trees/binary-search-tree.js) | [BST Time complexity](book/content/part03/binary-search-tree.asc#tree-complexity) - **AVL Trees**: Self-balanced BST to maximize lookup time. [Code](src/data-structures/trees/avl-tree.js) | [AVL Tree docs](book/C-AVL-tree.asc) | [Self-balancing & tree rotations docs](book/B-self-balancing-binary-search-trees.asc) - **Red-Black Trees**: Self-b

Core symbols most depended-on inside this repo

push
called by 169
lab/exercises/03-stacks-and-queues/stack.js
add
called by 109
src/data-structures/trees/avl-tree.js
addLast
called by 85
lab/exercises/02-linked-list/linkedlist.js
toString
called by 83
lab/exercises/04-trees-and-graphs/graph.js
from
called by 79
src/data-structures/trees/binary-tree-node.js
get
called by 76
src/data-structures/custom/lru-cache.js
addEdge
called by 73
src/data-structures/graphs/graph.js
add
called by 64
lab/exercises/04-trees-and-graphs/graph.js

Shape

Method 408
Function 331
Class 144

Languages

TypeScript100%

Modules by API surface

lab/exercises/07-object-oriented-design/minesweeper.js25 symbols
lab/exercises/07-object-oriented-design/othello.js24 symbols
src/data-structures/trees/binary-tree-node.js21 symbols
lab/exercises/07-object-oriented-design/call-center.js21 symbols
benchmarks/hashing-functions.perf.js21 symbols
src/data-structures/maps/hash-maps/hash-map.js19 symbols
src/data-structures/linked-lists/linked-list.js18 symbols
src/data-structures/trees/binary-search-tree.js17 symbols
src/data-structures/maps/hash-maps/hash-map-4.js16 symbols
lab/exercises/04-trees-and-graphs/graph.js16 symbols
src/data-structures/maps/tree-maps/tree-map.js15 symbols
src/data-structures/maps/hash-maps/hash-map-3.js14 symbols

Dependencies from manifests, versioned

@semantic-release/changelog5.0.1 · 1×
@semantic-release/git9.0.0 · 1×
benchmark2.1.4 · 1×
braces>=2.3.1 · 1×
commitizen4.1.2 · 1×
conventional-changelog-cli2.0.34 · 1×
cz-conventional-changelog3.2.0 · 1×
eslint7.12.1 · 1×
eslint-config-airbnb-base14.1.0 · 1×
eslint-plugin-import2.20.2 · 1×
eslint-plugin-jest24.1.0 · 1×
handlebars4.7.6 · 1×

For agents

$ claude mcp add dsa.js-data-structures-algorithms-javascript \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact