Product
Introducing Ruby Support in Socket
Socket is launching Ruby support for all users. Enhance your Rails projects with AI-powered security scans for vulnerabilities and supply chain threats. Now in Beta!
data-structure-typed
Advanced tools
Data Structures of Javascript & TypeScript. Binary Tree, BST, Graph, Heap, Priority Queue, Linked List, Queue, Deque, Stack, AVL Tree, Tree Multiset, Trie, Directed Graph, Undirected Graph, Singly Linked List, Doubly Linked List, Max Heap, Max Priority Qu
Data Structures of Javascript & TypeScript.
Do you envy C++ with STL, Python with collections, and Java with java.util ? Well, no need to envy anymore! JavaScript and TypeScript now have data-structure-typed.
Now you can use this library in Node.js and browser environments in CommonJS(require export.modules = ), ESModule(import export), Typescript(import export), UMD(var Queue = dataStructureTyped.Queue)
npm i data-structure-typed
yarn add data-structure-typed
import {
BinaryTree, Graph, Queue, Stack, PriorityQueue, BST, Trie, DoublyLinkedList,
AVLTree, MinHeap, SinglyLinkedList, DirectedGraph, TreeMultimap,
DirectedVertex, AVLTreeNode
} from 'data-structure-typed';
Copy the line below into the head tag in an HTML document.
<script src='https://cdn.jsdelivr.net/npm/data-structure-typed/dist/umd/data-structure-typed.js'></script>
<script src='https://cdn.jsdelivr.net/npm/data-structure-typed/dist/umd/data-structure-typed.min.js'></script>
Copy the code below into the script tag of your HTML, and you're good to go with your development work.
const {Heap} = dataStructureTyped;
const {
BinaryTree, Graph, Queue, Stack, PriorityQueue, BST, Trie, DoublyLinkedList,
AVLTree, MinHeap, SinglyLinkedList, DirectedGraph, TreeMultimap,
DirectedVertex, AVLTreeNode
} = dataStructureTyped;
Principle | Description |
---|---|
Practicality | Follows ES6 and ESNext standards, offering unified and considerate optional parameters, and simplifies method names. |
Extensibility | Adheres to OOP (Object-Oriented Programming) principles, allowing inheritance for all data structures. |
Modularization | Includes data structure modularization and independent NPM packages. |
Efficiency | All methods provide time and space complexity, comparable to native JS performance. |
Maintainability | Follows open-source community development standards, complete documentation, continuous integration, and adheres to TDD (Test-Driven Development) patterns. |
Testability | Automated and customized unit testing, performance testing, and integration testing. |
Portability | Plans for porting to Java, Python, and C++, currently achieved to 80%. |
Reusability | Fully decoupled, minimized side effects, and adheres to OOP. |
Security | Carefully designed security for member variables and methods. Read-write separation. Data structure software does not need to consider other security aspects. |
Scalability | Data structure software does not involve load issues. |
Try it out, or you can execute your own code using our visual tool
Try it out, or you can execute your own code using our visual tool
Try it out, or you can execute your own code using our visual tool
Try it out, or you can execute your own code using our visual tool
Try it out, or you can execute your own code using our visual tool
Try it out, or you can execute your own code using our visual tool
Try it out, or you can execute your own code using our visual tool
import {BST, BSTNode} from 'data-structure-typed';
const bst = new BST();
bst.add(11);
bst.add(3);
bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
bst.size === 16; // true
bst.has(6); // true
const node6 = bst.getNode(6); // BSTNode
bst.getHeight(6) === 2; // true
bst.getHeight() === 5; // true
bst.getDepth(6) === 3; // true
bst.getLeftMost()?.key === 1; // true
bst.delete(6);
bst.get(6); // undefined
bst.isAVLBalanced(); // true
bst.bfs()[0] === 11; // true
const objBST = new BST<{height: number, age: number}>();
objBST.add(11, { "name": "Pablo", "age": 15 });
objBST.add(3, { "name": "Kirk", "age": 1 });
objBST.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], [
{ "name": "Alice", "age": 15 },
{ "name": "Bob", "age": 1 },
{ "name": "Charlie", "age": 8 },
{ "name": "David", "age": 13 },
{ "name": "Emma", "age": 16 },
{ "name": "Frank", "age": 2 },
{ "name": "Grace", "age": 6 },
{ "name": "Hannah", "age": 9 },
{ "name": "Isaac", "age": 12 },
{ "name": "Jack", "age": 14 },
{ "name": "Katie", "age": 4 },
{ "name": "Liam", "age": 7 },
{ "name": "Mia", "age": 10 },
{ "name": "Noah", "age": 5 }
]
);
objBST.delete(11);
const {BST, BSTNode} = require('data-structure-typed');
const bst = new BST();
bst.add(11);
bst.add(3);
bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
bst.size === 16; // true
bst.has(6); // true
const node6 = bst.getNode(6);
bst.getHeight(6) === 2; // true
bst.getHeight() === 5; // true
bst.getDepth(6) === 3; // true
const leftMost = bst.getLeftMost();
leftMost?.key === 1; // true
bst.delete(6);
bst.get(6); // undefined
bst.isAVLBalanced(); // true or false
const bfsIDs = bst.bfs();
bfsIDs[0] === 11; // true
import {AVLTree} from 'data-structure-typed';
const avlTree = new AVLTree();
avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5])
avlTree.isAVLBalanced(); // true
avlTree.delete(10);
avlTree.isAVLBalanced(); // true
const {AVLTree} = require('data-structure-typed');
const avlTree = new AVLTree();
avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5])
avlTree.isAVLBalanced(); // true
avlTree.delete(10);
avlTree.isAVLBalanced(); // true
import {DirectedGraph} from 'data-structure-typed';
const graph = new DirectedGraph();
graph.addVertex('A');
graph.addVertex('B');
graph.hasVertex('A'); // true
graph.hasVertex('B'); // true
graph.hasVertex('C'); // false
graph.addEdge('A', 'B');
graph.hasEdge('A', 'B'); // true
graph.hasEdge('B', 'A'); // false
graph.deleteEdgeSrcToDest('A', 'B');
graph.hasEdge('A', 'B'); // false
graph.addVertex('C');
graph.addEdge('A', 'B');
graph.addEdge('B', 'C');
const topologicalOrderKeys = graph.topologicalSort(); // ['A', 'B', 'C']
import {UndirectedGraph} from 'data-structure-typed';
const graph = new UndirectedGraph();
graph.addVertex('A');
graph.addVertex('B');
graph.addVertex('C');
graph.addVertex('D');
graph.deleteVertex('C');
graph.addEdge('A', 'B');
graph.addEdge('B', 'D');
const dijkstraResult = graph.dijkstra('A');
Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.key) // ['A', 'B', 'D']
Algorithm | Function Description | Iteration Type |
---|---|---|
Binary Tree DFS | Traverse a binary tree in a depth-first manner, starting from the root node, first visiting the left subtree, and then the right subtree, using recursion. | Recursion + Iteration |
Binary Tree BFS | Traverse a binary tree in a breadth-first manner, starting from the root node, visiting nodes level by level from left to right. | Iteration |
Graph DFS | Traverse a graph in a depth-first manner, starting from a given node, exploring along one path as deeply as possible, and backtracking to explore other paths. Used for finding connected components, paths, etc. | Recursion + Iteration |
Binary Tree Morris | Morris traversal is an in-order traversal algorithm for binary trees with O(1) space complexity. It allows tree traversal without additional stack or recursion. | Iteration |
Graph BFS | Traverse a graph in a breadth-first manner, starting from a given node, first visiting nodes directly connected to the starting node, and then expanding level by level. Used for finding shortest paths, etc. | Recursion + Iteration |
Graph Tarjan's Algorithm | Find strongly connected components in a graph, typically implemented using depth-first search. | Recursion |
Graph Bellman-Ford Algorithm | Finding the shortest paths from a single source, can handle negative weight edges | Iteration |
Graph Dijkstra's Algorithm | Finding the shortest paths from a single source, cannot handle negative weight edges | Iteration |
Graph Floyd-Warshall Algorithm | Finding the shortest paths between all pairs of nodes | Iteration |
Graph getCycles | Find all cycles in a graph or detect the presence of cycles. | Recursion |
Graph getCutVertexes | Find cut vertices in a graph, which are nodes that, when removed, increase the number of connected components in the graph. | Recursion |
Graph getSCCs | Find strongly connected components in a graph, which are subgraphs where any two nodes can reach each other. | Recursion |
Graph getBridges | Find bridges in a graph, which are edges that, when removed, increase the number of connected components in the graph. | Recursion |
Graph topologicalSort | Perform topological sorting on a directed acyclic graph (DAG) to find a linear order of nodes such that all directed edges go from earlier nodes to later nodes. | Recursion |
Data Structure | Unit Test | Performance Test | API Documentation | Implemented |
---|---|---|---|---|
Binary Tree | Binary Tree | |||
Binary Search Tree (BST) | BST | |||
AVL Tree | AVLTree | |||
Red Black Tree | RedBlackTree | |||
Tree Multiset | TreeMultimap | |||
Segment Tree | SegmentTree | |||
Binary Indexed Tree | BinaryIndexedTree | |||
Graph | AbstractGraph | |||
Directed Graph | DirectedGraph | |||
Undirected Graph | UndirectedGraph | |||
Linked List | SinglyLinkedList | |||
Singly Linked List | SinglyLinkedList | |||
Doubly Linked List | DoublyLinkedList | |||
Queue | Queue | |||
Object Deque | ObjectDeque | |||
Array Deque | ArrayDeque | |||
Stack | Stack | |||
Coordinate Set | CoordinateSet | |||
Coordinate Map | CoordinateMap | |||
Heap | Heap | |||
Priority Queue | PriorityQueue | |||
Max Priority Queue | MaxPriorityQueue | |||
Min Priority Queue | MinPriorityQueue | |||
Trie | Trie |
Data Structure Typed | C++ STL | java.util | Python collections |
---|---|---|---|
DoublyLinkedList<E> | list<T> | LinkedList<E> | deque |
SinglyLinkedList<E> | - | - | - |
Array<E> | vector<T> | ArrayList<E> | list |
Queue<E> | queue<T> | Queue<E> | - |
Deque<E> | deque<T> | - | - |
PriorityQueue<E> | priority_queue<T> | PriorityQueue<E> | - |
Heap<E> | priority_queue<T> | PriorityQueue<E> | heapq |
Stack<E> | stack<T> | Stack<E> | - |
Set<E> | set<T> | HashSet<E> | set |
Map<K, V> | map<K, V> | HashMap<K, V> | dict |
- | unordered_set<T> | HashSet<E> | - |
HashMap<K, V> | unordered_map<K, V> | HashMap<K, V> | defaultdict |
Map<K, V> | - | - | OrderedDict |
BinaryTree<K, V> | - | - | - |
BST<K, V> | - | - | - |
TreeMultimap<K, V> | multimap<K, V> | - | - |
AVLTree<E> | - | TreeSet<E> | - |
AVLTree<K, V> | - | TreeMap<K, V> | - |
AVLTree<E> | set | TreeSet<E> | - |
Trie | - | - | - |
- | multiset<T> | - | - |
DirectedGraph<V, E> | - | - | - |
UndirectedGraph<V, E> | - | - | - |
- | unordered_multiset | - | Counter |
- | - | LinkedHashSet<E> | - |
- | - | LinkedHashMap<K, V> | - |
- | unordered_multimap<K, V> | - | - |
- | bitset<N> | - | - |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
SRC 10,000 add | 0.57 | 1745.58 | 5.41e-6 |
CJS 10,000 add | 0.57 | 1751.77 | 4.80e-6 |
MJS 10,000 add | 0.57 | 1749.46 | 6.15e-6 |
SRC PQ 10,000 add & pop | 3.42 | 292.80 | 2.97e-5 |
CJS PQ 10,000 add & pop | 3.40 | 293.71 | 3.10e-5 |
MJS PQ 10,000 add & pop | 3.41 | 293.62 | 3.51e-5 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 add randomly | 31.25 | 32.00 | 3.13e-4 |
10,000 add & delete randomly | 71.87 | 13.91 | 0.00 |
10,000 addMany | 41.06 | 24.36 | 4.25e-4 |
10,000 get | 28.10 | 35.59 | 2.51e-4 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000 add randomly | 13.02 | 76.79 | 1.25e-4 |
1,000 add & delete randomly | 15.86 | 63.05 | 1.08e-4 |
1,000 addMany | 10.26 | 97.46 | 7.97e-5 |
1,000 get | 18.35 | 54.49 | 3.12e-4 |
1,000 dfs | 154.50 | 6.47 | 7.28e-4 |
1,000 bfs | 56.53 | 17.69 | 3.74e-4 |
1,000 morris | 257.07 | 3.89 | 0.00 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 add randomly | 28.25 | 35.40 | 3.07e-4 |
10,000 add & delete randomly | 67.69 | 14.77 | 8.51e-4 |
10,000 addMany | 29.25 | 34.19 | 0.00 |
10,000 get | 28.77 | 34.76 | 2.55e-4 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
100,000 add | 86.88 | 11.51 | 0.00 |
100,000 add & delete randomly | 215.71 | 4.64 | 0.00 |
100,000 getNode | 40.78 | 24.52 | 3.22e-4 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000 addVertex | 0.10 | 9992.98 | 8.63e-7 |
1,000 addEdge | 6.11 | 163.74 | 1.31e-4 |
1,000 getVertex | 0.05 | 2.16e+4 | 6.15e-7 |
1,000 getEdge | 23.01 | 43.45 | 0.00 |
tarjan | 222.33 | 4.50 | 0.02 |
tarjan all | 224.99 | 4.44 | 0.02 |
topologicalSort | 177.80 | 5.62 | 0.01 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 set | 0.99 | 1006.45 | 2.07e-5 |
10,000 set & get | 1.49 | 669.20 | 2.66e-5 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 add & pop | 5.78 | 172.88 | 4.96e-5 |
10,000 fib add & pop | 357.91 | 2.79 | 0.01 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000,000 push | 207.57 | 4.82 | 0.04 |
1,000,000 unshift | 224.17 | 4.46 | 0.10 |
1,000,000 unshift & shift | 170.27 | 5.87 | 0.04 |
1,000,000 insertBefore | 325.71 | 3.07 | 0.08 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 push & pop | 223.42 | 4.48 | 0.02 |
10,000 insertBefore | 253.67 | 3.94 | 0.02 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 refill & poll | 10.51 | 95.16 | 0.01 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
100,000 add & pop | 105.61 | 9.47 | 0.00 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000,000 push | 14.01 | 71.39 | 4.74e-4 |
1,000,000 push & pop | 23.12 | 43.25 | 6.61e-4 |
1,000,000 push & shift | 25.00 | 40.00 | 0.01 |
1,000,000 unshift & shift | 22.04 | 45.38 | 2.90e-4 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000,000 push | 48.25 | 20.72 | 0.01 |
1,000,000 push & shift | 83.38 | 11.99 | 0.00 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000,000 push | 45.02 | 22.21 | 0.01 |
1,000,000 push & pop | 58.63 | 17.06 | 0.03 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
100,000 push | 44.82 | 22.31 | 0.00 |
100,000 getWords | 111.82 | 8.94 | 0.05 |
Standardize API conventions by using 'add' and 'delete' for element manipulation methods in all data structures.
Opt for concise and clear method names, avoiding excessive length while ensuring explicit intent.
By strictly adhering to object-oriented design (BinaryTree -> BST -> AVLTree -> TreeMultimap), you can seamlessly inherit the existing data structures to implement the customized ones you need. Object-oriented design stands as the optimal approach to data structure design.
FAQs
Javascript Data Structure. Heap, Binary Tree, Red Black Tree, Linked List, Deque, Trie, HashMap, Directed Graph, Undirected Graph, Binary Search Tree(BST), AVL Tree, Priority Queue, Graph, Queue, Tree Multiset, Singly Linked List, Doubly Linked List, Max
The npm package data-structure-typed receives a total of 6,808 weekly downloads. As such, data-structure-typed popularity was classified as popular.
We found that data-structure-typed demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket is launching Ruby support for all users. Enhance your Rails projects with AI-powered security scans for vulnerabilities and supply chain threats. Now in Beta!
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.