@coderbaba/stl-js
Version:
STL data structures for JavaScript
1 lines • 35.6 kB
Source Map (JSON)
{"version":3,"sources":["../index.ts","../structures/Stack.ts","../structures/Queue.ts","../structures/Deque.ts","../structures/PriorityQueue.ts","../structures/LinkedList.ts","../structures/DoublyLinkedList.ts","../structures/Pair.ts","../structures/MinHeap.ts","../structures/MaxHeap.ts","../structures/MultiMap.ts","../structures/BinaryTree.ts","../structures/UnorderedSet.ts","../structures/UnorderedMap.ts","../structures/Graph.ts","../structures/Tries.ts"],"sourcesContent":["export { default as Stack } from \"./structures/Stack\";\nexport { default as Queue } from \"./structures/Queue\";\nexport { default as Deque } from \"./structures/Deque\";\nexport { default as PriorityQueue } from \"./structures/PriorityQueue\";\nexport { default as LinkedList } from \"./structures/LinkedList\";\nexport { default as DoublyLinkedList } from \"./structures/DoublyLinkedList\";\nexport { default as Pair } from \"./structures/Pair\";\nexport { default as MinHeap } from \"./structures/MinHeap\";\nexport { default as MaxHeap } from \"./structures/MaxHeap\";\nexport { default as MultiMap } from \"./structures/MultiMap\";\nexport { default as BinaryTree } from \"./structures/BinaryTree\";\nexport { default as UnorderedSet } from \"./structures/UnorderedSet\";\nexport { default as UnorderedMap } from \"./structures/UnorderedMap\";\nexport { default as Graph } from \"./structures/Graph\";\nexport { default as Trie } from \"./structures/Tries\";\n","class Stack<T> {\n private items: T[] = [];\n\n push(item: T): void {\n this.items.push(item);\n }\n\n pop(): T | undefined {\n return this.items.pop();\n }\n\n peek(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n size(): number {\n return this.items.length;\n }\n}\n\nexport default Stack;\n","class Queue<T> {\n private items: T[] = [];\n\n enqueue(item: T): void {\n this.items.push(item);\n }\n\n dequeue(): T | undefined {\n return this.items.shift();\n }\n\n front(): T | undefined {\n return this.items[0];\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n size(): number {\n return this.items.length;\n }\n}\n\nexport default Queue;\n","class Deque<T> {\n private items: T[] = [];\n\n addFront(item: T): void {\n this.items.unshift(item);\n }\n\n addRear(item: T): void {\n this.items.push(item);\n }\n\n removeFront(): T | undefined {\n return this.items.shift();\n }\n\n removeRear(): T | undefined {\n return this.items.pop();\n }\n\n front(): T | undefined {\n return this.items[0];\n }\n\n rear(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n size(): number {\n return this.items.length;\n }\n}\n\nexport default Deque;\n","type PriorityNode<T> = {\r\n value: T;\r\n priority: number;\r\n};\r\n\r\nclass PriorityQueue<T> {\r\n private items: PriorityNode<T>[] = [];\r\n\r\n enqueue(value: T, priority: number): void {\r\n const node: PriorityNode<T> = { value, priority };\r\n let added = false;\r\n\r\n for (let i = 0; i < this.items.length; i++) {\r\n if (priority < this.items[i].priority) {\r\n this.items.splice(i, 0, node);\r\n added = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!added) {\r\n this.items.push(node);\r\n }\r\n }\r\n\r\n dequeue(): PriorityNode<T> | undefined {\r\n return this.items.shift();\r\n }\r\n\r\n peek(): PriorityNode<T> | undefined {\r\n return this.items[0];\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.items.length === 0;\r\n }\r\n\r\n size(): number {\r\n return this.items.length;\r\n }\r\n\r\n print(): string {\r\n return this.items.map(i => `(${i.value}, p=${i.priority})`).join(\", \");\r\n }\r\n}\r\n\r\nexport default PriorityQueue;\r\n","class Node<T> {\n value: T;\n next: Node<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nclass LinkedList<T> {\n private head: Node<T> | null = null;\n private tail: Node<T> | null = null;\n private length: number = 0;\n\n append(value: T): void {\n const newNode = new Node(value);\n if (!this.head) {\n this.head = this.tail = newNode;\n } else {\n if (this.tail) this.tail.next = newNode;\n this.tail = newNode;\n }\n this.length++;\n }\n\n prepend(value: T): void {\n const newNode = new Node(value);\n newNode.next = this.head;\n this.head = newNode;\n if (!this.tail) this.tail = newNode;\n this.length++;\n }\n\n delete(value: T): void {\n if (!this.head) return;\n\n while (this.head && this.head.value === value) {\n this.head = this.head.next;\n this.length--;\n }\n\n let current = this.head;\n while (current && current.next) {\n if (current.next.value === value) {\n current.next = current.next.next;\n this.length--;\n } else {\n current = current.next;\n }\n }\n\n if (this.tail && this.tail.value === value) {\n this.tail = current;\n }\n }\n\n find(value: T): Node<T> | null {\n let current = this.head;\n while (current) {\n if (current.value === value) return current;\n current = current.next;\n }\n return null;\n }\n\n size(): number {\n return this.length;\n }\n\n isEmpty(): boolean {\n return this.length === 0;\n }\n}\n\nexport default LinkedList;\n","class Node<T> {\r\n value: T;\r\n prev: Node<T> | null = null;\r\n next: Node<T> | null = null;\r\n\r\n constructor(value: T) {\r\n this.value = value;\r\n }\r\n}\r\n\r\nclass DoublyLinkedList<T> {\r\n private head: Node<T> | null = null;\r\n private tail: Node<T> | null = null;\r\n private length: number = 0;\r\n\r\n push(value: T): void {\r\n const newNode = new Node(value);\r\n if (!this.tail) {\r\n this.head = this.tail = newNode;\r\n } else {\r\n newNode.prev = this.tail;\r\n this.tail.next = newNode;\r\n this.tail = newNode;\r\n }\r\n this.length++;\r\n }\r\n\r\n pop(): T | null {\r\n if (!this.tail) return null;\r\n const removed = this.tail;\r\n this.tail = this.tail.prev;\r\n if (this.tail) this.tail.next = null;\r\n else this.head = null;\r\n this.length--;\r\n return removed.value;\r\n }\r\n\r\n unshift(value: T): void {\r\n const newNode = new Node(value);\r\n if (!this.head) {\r\n this.head = this.tail = newNode;\r\n } else {\r\n newNode.next = this.head;\r\n this.head.prev = newNode;\r\n this.head = newNode;\r\n }\r\n this.length++;\r\n }\r\n\r\n shift(): T | null {\r\n if (!this.head) return null;\r\n const removed = this.head;\r\n this.head = this.head.next;\r\n if (this.head) this.head.prev = null;\r\n else this.tail = null;\r\n this.length--;\r\n return removed.value;\r\n }\r\n\r\n find(value: T): Node<T> | null {\r\n let current = this.head;\r\n while (current) {\r\n if (current.value === value) return current;\r\n current = current.next;\r\n }\r\n return null;\r\n }\r\n\r\n delete(value: T): boolean {\r\n let current = this.head;\r\n while (current) {\r\n if (current.value === value) {\r\n if (current.prev) current.prev.next = current.next;\r\n else this.head = current.next;\r\n\r\n if (current.next) current.next.prev = current.prev;\r\n else this.tail = current.prev;\r\n\r\n this.length--;\r\n return true;\r\n }\r\n current = current.next;\r\n }\r\n return false;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.length === 0;\r\n }\r\n\r\n size(): number {\r\n return this.length;\r\n }\r\n\r\n toArray(): T[] {\r\n const result: T[] = [];\r\n let current = this.head;\r\n while (current) {\r\n result.push(current.value);\r\n current = current.next;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nexport default DoublyLinkedList;\r\n","class Pair<T, U> {\r\n private first: T;\r\n private second: U;\r\n\r\n constructor(first: T, second: U) {\r\n this.first = first;\r\n this.second = second;\r\n }\r\n\r\n getFirst(): T {\r\n return this.first;\r\n }\r\n\r\n getSecond(): U {\r\n return this.second;\r\n }\r\n\r\n setFirst(value: T): void {\r\n this.first = value;\r\n }\r\n\r\n setSecond(value: U): void {\r\n this.second = value;\r\n }\r\n\r\n toArray(): [T, U] {\r\n return [this.first, this.second];\r\n }\r\n\r\n toString(): string {\r\n return `(${this.first}, ${this.second})`;\r\n }\r\n\r\n toObject(): { first: T; second: U } {\r\n return { first: this.first, second: this.second };\r\n }\r\n}\r\n\r\nexport default Pair;\r\n","class MinHeap<T> {\n private heap: T[] = [];\n\n insert(value: T): void {\n this.heap.push(value);\n this.bubbleUp();\n }\n\n private bubbleUp(): void {\n let index = this.heap.length - 1;\n while (index > 0) {\n const parent = Math.floor((index - 1) / 2);\n if (this.heap[parent] <= this.heap[index]) break;\n [this.heap[parent], this.heap[index]] = [\n this.heap[index],\n this.heap[parent],\n ];\n index = parent;\n }\n }\n\n extractMin(): T | undefined {\n if (this.heap.length === 0) return undefined;\n if (this.heap.length === 1) return this.heap.pop();\n\n const min = this.heap[0];\n const last = this.heap.pop();\n if (last !== undefined) {\n this.heap[0] = last;\n this.sinkDown(0);\n }\n return min;\n }\n\n private sinkDown(index: number): void {\n const left = 2 * index + 1;\n const right = 2 * index + 2;\n let smallest = index;\n\n if (left < this.heap.length && this.heap[left] < this.heap[smallest]) {\n smallest = left;\n }\n\n if (right < this.heap.length && this.heap[right] < this.heap[smallest]) {\n smallest = right;\n }\n\n if (smallest !== index) {\n [this.heap[smallest], this.heap[index]] = [\n this.heap[index],\n this.heap[smallest],\n ];\n this.sinkDown(smallest);\n }\n }\n\n peek(): T | undefined {\n return this.heap[0];\n }\n\n size(): number {\n return this.heap.length;\n }\n}\n\nexport default MinHeap;\n","class MaxHeap<T> {\n private heap: T[] = [];\n\n insert(value: T): void {\n this.heap.push(value);\n this.bubbleUp();\n }\n\n private bubbleUp(): void {\n let index = this.heap.length - 1;\n while (index > 0) {\n const parent = Math.floor((index - 1) / 2);\n if (this.heap[parent] >= this.heap[index]) break;\n [this.heap[parent], this.heap[index]] = [this.heap[index], this.heap[parent]];\n index = parent;\n }\n }\n\n extractMax(): T | undefined {\n if (this.heap.length === 0) return undefined;\n if (this.heap.length === 1) return this.heap.pop();\n\n const max = this.heap[0];\n const end = this.heap.pop();\n if (end !== undefined) {\n this.heap[0] = end;\n this.sinkDown(0);\n }\n return max;\n }\n\n private sinkDown(index: number): void {\n const length = this.heap.length;\n const element = this.heap[index];\n let largest = index;\n\n const left = 2 * index + 1;\n const right = 2 * index + 2;\n\n if (left < length && this.heap[left] > this.heap[largest]) {\n largest = left;\n }\n\n if (right < length && this.heap[right] > this.heap[largest]) {\n largest = right;\n }\n\n if (largest !== index) {\n [this.heap[index], this.heap[largest]] = [this.heap[largest], this.heap[index]];\n this.sinkDown(largest);\n }\n }\n\n peek(): T | undefined {\n return this.heap[0];\n }\n\n size(): number {\n return this.heap.length;\n }\n}\n\nexport default MaxHeap;\n","class MultiMap<K, V> {\r\n private map: Map<K, V[]>;\r\n\r\n constructor() {\r\n this.map = new Map<K, V[]>();\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (!this.map.has(key)) {\r\n this.map.set(key, []);\r\n }\r\n this.map.get(key)!.push(value);\r\n }\r\n\r\n get(key: K): V[] {\r\n return this.map.get(key) ?? [];\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.map.has(key);\r\n }\r\n\r\n delete(key: K, value?: V): boolean {\r\n if (!this.map.has(key)) return false;\r\n\r\n if (value === undefined) {\r\n return this.map.delete(key);\r\n }\r\n\r\n const values = this.map.get(key)!;\r\n const index = values.indexOf(value);\r\n\r\n if (index !== -1) {\r\n values.splice(index, 1);\r\n if (values.length === 0) {\r\n this.map.delete(key);\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n clear(): void {\r\n this.map.clear();\r\n }\r\n\r\n keys(): K[] {\r\n return Array.from(this.map.keys());\r\n }\r\n\r\n values(): V[] {\r\n return Array.from(this.map.values()).flat();\r\n }\r\n\r\n entries(): [K, V[]][] {\r\n return Array.from(this.map.entries());\r\n }\r\n\r\n size(): number {\r\n return this.map.size;\r\n }\r\n\r\n forEach(callback: (key: K, values: V[]) => void): void {\r\n this.map.forEach((values, key) => callback(key, values));\r\n }\r\n}\r\n\r\nexport default MultiMap;\r\n","class TreeNode<T> {\n value: T;\n left: TreeNode<T> | null = null;\n right: TreeNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nclass BinaryTree<T> {\n private root: TreeNode<T> | null = null;\n\n insert(value: T): void {\n const newNode = new TreeNode < T > (value);\n\n if (!this.root) {\n this.root = newNode;\n return;\n }\n\n const queue: TreeNode<T>[] = [this.root];\n\n while (queue.length) {\n const node = queue.shift()!;\n if (!node.left) {\n node.left = newNode;\n return;\n } else {\n queue.push(node.left);\n }\n\n if (!node.right) {\n node.right = newNode;\n return;\n } else {\n queue.push(node.right);\n }\n }\n }\n\n inOrder(node: TreeNode<T> | null = this.root, result: T[] = []): T[] {\n if (node) {\n this.inOrder(node.left, result);\n result.push(node.value);\n this.inOrder(node.right, result);\n }\n return result;\n }\n\n preOrder(node: TreeNode<T> | null = this.root, result: T[] = []): T[] {\n if (node) {\n result.push(node.value);\n this.preOrder(node.left, result);\n this.preOrder(node.right, result);\n }\n return result;\n }\n\n postOrder(node: TreeNode<T> | null = this.root, result: T[] = []): T[] {\n if (node) {\n this.postOrder(node.left, result);\n this.postOrder(node.right, result);\n result.push(node.value);\n }\n return result;\n }\n}\n\nexport default BinaryTree;\n","class UnorderedSet<T> {\r\n private set: Set<T>;\r\n\r\n constructor() {\r\n this.set = new Set < T > ();\r\n }\r\n\r\n add(value: T): void {\r\n this.set.add(value);\r\n }\r\n\r\n has(value: T): boolean {\r\n return this.set.has(value);\r\n }\r\n\r\n delete(value: T): boolean {\r\n return this.set.delete(value);\r\n }\r\n\r\n clear(): void {\r\n this.set.clear();\r\n }\r\n\r\n size(): number {\r\n return this.set.size;\r\n }\r\n\r\n values(): T[] {\r\n return Array.from(this.set.values());\r\n }\r\n\r\n forEach(callback: (value: T) => void): void {\r\n this.set.forEach(callback);\r\n }\r\n}\r\n\r\nexport default UnorderedSet;\r\n","class UnorderedMap<K, V> {\r\n private map: Map<K, V>;\r\n\r\n constructor() {\r\n this.map = new Map < K, V > ();\r\n }\r\n\r\n set(key: K, value: V): void {\r\n this.map.set(key, value);\r\n }\r\n\r\n get(key: K): V | undefined {\r\n return this.map.get(key);\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.map.has(key);\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.map.delete(key);\r\n }\r\n\r\n clear(): void {\r\n this.map.clear();\r\n }\r\n\r\n size(): number {\r\n return this.map.size;\r\n }\r\n\r\n keys(): K[] {\r\n return Array.from(this.map.keys());\r\n }\r\n\r\n values(): V[] {\r\n return Array.from(this.map.values());\r\n }\r\n\r\n entries(): [K, V][] {\r\n return Array.from(this.map.entries());\r\n }\r\n\r\n forEach(callback: (value: V, key: K, map: Map<K, V>) => void): void {\r\n this.map.forEach(callback);\r\n }\r\n}\r\n\r\nexport default UnorderedMap;\r\n","class Graph<T> {\n private adjList: Map<T, T[]>;\n\n constructor() {\n this.adjList = new Map<T, T[]>();\n }\n\n addVertex(vertex: T): void {\n if (!this.adjList.has(vertex)) {\n this.adjList.set(vertex, []);\n }\n }\n\n addEdge(v1: T, v2: T): void {\n this.addVertex(v1);\n this.addVertex(v2);\n this.adjList.get(v1)!.push(v2);\n this.adjList.get(v2)!.push(v1);\n }\n\n removeEdge(v1: T, v2: T): void {\n this.adjList.set(\n v1,\n this.adjList.get(v1)!.filter((v) => v !== v2)\n );\n this.adjList.set(\n v2,\n this.adjList.get(v2)!.filter((v) => v !== v1)\n );\n }\n\n removeVertex(vertex: T): void {\n const neighbors = this.adjList.get(vertex);\n if (neighbors) {\n for (const adjacent of neighbors) {\n this.removeEdge(vertex, adjacent);\n }\n }\n this.adjList.delete(vertex);\n }\n\n dfs(start: T, visited: Set<T> = new Set(), result: T[] = []): T[] {\n visited.add(start);\n result.push(start);\n const neighbors = this.adjList.get(start) || [];\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n this.dfs(neighbor, visited, result);\n }\n }\n return result;\n }\n\n bfs(start: T): T[] {\n const visited = new Set<T>();\n const queue: T[] = [start];\n const result: T[] = [];\n\n while (queue.length > 0) {\n const vertex = queue.shift()!;\n if (!visited.has(vertex)) {\n visited.add(vertex);\n result.push(vertex);\n const neighbors = this.adjList.get(vertex) || [];\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n queue.push(neighbor);\n }\n }\n }\n }\n return result;\n }\n}\n\nexport default Graph;\n","class TrieNode {\r\n children: Map<string, TrieNode>;\r\n isEndOfWord: boolean;\r\n\r\n constructor() {\r\n this.children = new Map();\r\n this.isEndOfWord = false;\r\n }\r\n}\r\n\r\nclass Trie {\r\n private root: TrieNode;\r\n\r\n constructor() {\r\n this.root = new TrieNode();\r\n }\r\n\r\n insert(word: string): void {\r\n let node = this.root;\r\n for (const char of word) {\r\n if (!node.children.has(char)) {\r\n node.children.set(char, new TrieNode());\r\n }\r\n node = node.children.get(char)!;\r\n }\r\n node.isEndOfWord = true;\r\n }\r\n\r\n search(word: string): boolean {\r\n let node = this.root;\r\n for (const char of word) {\r\n if (!node.children.has(char)) return false;\r\n node = node.children.get(char)!;\r\n }\r\n return node.isEndOfWord;\r\n }\r\n\r\n startsWith(prefix: string): boolean {\r\n let node = this.root;\r\n for (const char of prefix) {\r\n if (!node.children.has(char)) return false;\r\n node = node.children.get(char)!;\r\n }\r\n return true;\r\n }\r\n\r\n delete(word: string): boolean {\r\n return this.deleteHelper(this.root, word, 0);\r\n }\r\n\r\n private deleteHelper(node: TrieNode, word: string, index: number): boolean {\r\n if (index === word.length) {\r\n if (!node.isEndOfWord) return false;\r\n node.isEndOfWord = false;\r\n return node.children.size === 0;\r\n }\r\n\r\n const char = word[index];\r\n const nextNode = node.children.get(char);\r\n if (!nextNode) return false;\r\n\r\n const shouldDeleteCurrent = this.deleteHelper(nextNode, word, index + 1);\r\n\r\n if (shouldDeleteCurrent) {\r\n node.children.delete(char);\r\n return node.children.size === 0 && !node.isEndOfWord;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // Optional: Get all words in the trie (DFS)\r\n getAllWords(): string[] {\r\n const result: string[] = [];\r\n this.collectWords(this.root, \"\", result);\r\n return result;\r\n }\r\n\r\n private collectWords(node: TrieNode, prefix: string, result: string[]): void {\r\n if (node.isEndOfWord) result.push(prefix);\r\n for (const [char, childNode] of node.children) {\r\n this.collectWords(childNode, prefix + char, result);\r\n }\r\n }\r\n}\r\n\r\nexport default Trie;\r\n"],"mappings":"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","names":["Node"]}