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)
DFS(Depth-First Search), DFSIterative, BFS(Breadth-First Search), morris, Bellman-Ford Algorithm, Dijkstra's Algorithm, Floyd-Warshall Algorithm, Tarjan's Algorithm.
npm i data-structure-typed --save
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';
<script src='https://cdn.jsdelivr.net/npm/data-structure-typed/dist/umd/data-structure-typed.min.js'></script>
const {Heap} = dataStructureTyped;
const {
BinaryTree, Graph, Queue, Stack, PriorityQueue, BST, Trie, DoublyLinkedList,
AVLTree, MinHeap, SinglyLinkedList, DirectedGraph, TreeMultimap,
DirectedVertex, AVLTreeNode
} = dataStructureTyped;
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.get(6); // BSTNode
bst.getHeight(6) === 2; // true
bst.getHeight() === 5; // true
bst.getDepth(6) === 3; // true
bst.getLeftMost()?.id === 1; // true
bst.delete(6);
bst.get(6); // null
bst.isAVLBalanced(); // true
bst.bfs()[0] === 11; // true
const objBST = new BST<BSTNode<{id: number, keyA: number}>>();
objBST.add(11, {id: 11, keyA: 11});
objBST.add(3, {id: 3, keyA: 3});
objBST.addMany([{id: 15, keyA: 15}, {id: 1, keyA: 1}, {id: 8, keyA: 8},
{id: 13, keyA: 13}, {id: 16, keyA: 16}, {id: 2, keyA: 2},
{id: 6, keyA: 6}, {id: 9, keyA: 9}, {id: 12, keyA: 12},
{id: 14, keyA: 14}, {id: 4, keyA: 4}, {id: 7, keyA: 7},
{id: 10, keyA: 10}, {id: 5, keyA: 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.get(6);
bst.getHeight(6) === 2; // true
bst.getHeight() === 5; // true
bst.getDepth(6) === 3; // true
const leftMost = bst.getLeftMost();
leftMost?.id === 1; // true
expect(leftMost?.id).toBe(1);
bst.delete(6);
bst.get(6); // null
bst.isAVLBalanced(); // true or false
const bfsIDs = bst.bfs();
bfsIDs[0] === 11; // true
expect(bfsIDs[0]).toBe(11);
const objBST = new BST();
objBST.add(11, {id: 11, keyA: 11});
objBST.add(3, {id: 3, keyA: 3});
objBST.addMany([{id: 15, keyA: 15}, {id: 1, keyA: 1}, {id: 8, keyA: 8},
{id: 13, keyA: 13}, {id: 16, keyA: 16}, {id: 2, keyA: 2},
{id: 6, keyA: 6}, {id: 9, keyA: 9}, {id: 12, keyA: 12},
{id: 14, keyA: 14}, {id: 4, keyA: 4}, {id: 7, keyA: 7},
{id: 10, keyA: 10}, {id: 5, keyA: 5}]);
objBST.delete(11);
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 {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 topologicalOrderIds = 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.id) // ['A', 'B', 'D']
Data Structure | Unit Test | Performance Test | API Documentation | Implemented |
---|---|---|---|---|
Binary Tree | Binary Tree | |||
Binary Search Tree (BST) | BST | |||
AVL Tree | AVLTree | |||
Red Black Tree | AVLTree | |||
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 |
---|---|---|---|
Array<E> | vector<T> | ArrayList<E> | list |
DoublyLinkedList<E> | list<T> | LinkedList<E> | deque |
SinglyLinkedList<E> | - | - | - |
Set<E> | set<T> | HashSet<E> | set |
Map<K, V> | map<K, V> | HashMap<K, V> | dict |
Map<K, V> | - | - | OrderedDict |
Queue<E> | queue<T> | Queue<E> | - |
PriorityQueue<E> | priority_queue<T> | PriorityQueue<E> | - |
Heap<V> | priority_queue<T> | PriorityQueue<E> | heapq |
Stack<E> | stack<T> | Stack<E> | - |
Deque<E> | deque<T> | - | - |
Trie | - | - | - |
HashMap<K, V> | unordered_map<K, V> | HashMap<K, V> | defaultdict |
- | multiset<T> | - | - |
- | multimap<K, V> | - | - |
BinaryTree<K, V> | - | - | - |
BST<K, V> | - | - | - |
DirectedGraph<V, E> | - | - | - |
UndirectedGraph<V, E> | - | - | - |
- | unordered_multiset | - | Counter |
- | - | LinkedHashSet<E> | - |
- | - | LinkedHashMap<K, V> | - |
AVLTree<E> | - | TreeSet<E> | - |
AVLTree<K, V> | - | TreeMap<K, V> | - |
AVLTree<E> | set | TreeSet<E> | - |
- | unordered_multimap<K, V> | - | - |
- | bitset<N> | - | - |
- | unordered_set<T> | HashSet<E> | - |
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.
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 add randomly | 30.52 | 32.76 | 3.28e-4 |
10,000 add & delete randomly | 66.96 | 14.94 | 0.00 |
10,000 addMany | 39.78 | 25.14 | 3.67e-4 |
10,000 get | 27.38 | 36.52 | 0.00 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000 add randomly | 10.50 | 95.20 | 2.30e-4 |
1,000 add & delete randomly | 16.18 | 61.81 | 2.48e-4 |
1,000 addMany | 10.80 | 92.62 | 1.83e-4 |
1,000 get | 18.03 | 55.45 | 1.41e-4 |
1,000 dfs | 157.86 | 6.33 | 0.00 |
1,000 bfs | 56.68 | 17.64 | 0.00 |
1,000 morris | 37.21 | 26.88 | 2.79e-4 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 add randomly | 27.61 | 36.21 | 4.73e-4 |
10,000 add & delete randomly | 62.93 | 15.89 | 5.86e-4 |
10,000 addMany | 28.70 | 34.84 | 0.00 |
10,000 get | 27.67 | 36.14 | 2.92e-4 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
100,000 add randomly | 87.51 | 11.43 | 0.01 |
100,000 add & delete randomly | 189.06 | 5.29 | 0.01 |
100,000 getNode | 35.33 | 28.31 | 8.93e-4 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000 addVertex | 0.10 | 9899.91 | 8.58e-7 |
1,000 addEdge | 6.06 | 165.02 | 1.68e-4 |
1,000 getVertex | 0.05 | 2.17e+4 | 4.22e-7 |
1,000 getEdge | 23.05 | 43.38 | 0.00 |
tarjan | 222.59 | 4.49 | 0.01 |
tarjan all | 226.89 | 4.41 | 0.01 |
topologicalSort | 187.34 | 5.34 | 0.01 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 add & pop | 4.66 | 214.54 | 9.38e-5 |
10,000 fib add & pop | 364.30 | 2.74 | 0.01 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000,000 unshift | 243.61 | 4.10 | 0.07 |
1,000,000 unshift & shift | 173.32 | 5.77 | 0.03 |
1,000,000 insertBefore | 315.86 | 3.17 | 0.04 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 push & pop | 228.06 | 4.38 | 0.03 |
10,000 insertBefore | 252.07 | 3.97 | 0.01 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
10,000 refill & poll | 11.53 | 86.71 | 2.27e-4 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000,000 push | 227.24 | 4.40 | 0.07 |
1,000,000 shift | 25.60 | 39.07 | 0.00 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
1,000,000 push | 45.98 | 21.75 | 0.01 |
1,000,000 push & shift | 81.12 | 12.33 | 0.00 |
test name | time taken (ms) | executions per sec | sample deviation |
---|---|---|---|
100,000 push | 59.40 | 16.83 | 0.01 |
100,000 getWords | 90.07 | 11.10 | 0.00 |
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.