data-structure-typed 2.5.0 → 2.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
  2. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
  3. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
  4. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
  5. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
  6. package/CHANGELOG.md +5 -1
  7. package/README.md +124 -29
  8. package/dist/cjs/binary-tree.cjs +26282 -0
  9. package/dist/cjs/graph.cjs +5422 -0
  10. package/dist/cjs/hash.cjs +1310 -0
  11. package/dist/cjs/heap.cjs +1602 -0
  12. package/dist/cjs/index.cjs +31257 -14673
  13. package/dist/cjs/linked-list.cjs +4576 -0
  14. package/dist/cjs/matrix.cjs +1080 -0
  15. package/dist/cjs/priority-queue.cjs +1376 -0
  16. package/dist/cjs/queue.cjs +4264 -0
  17. package/dist/cjs/stack.cjs +907 -0
  18. package/dist/cjs/trie.cjs +1223 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +26319 -0
  20. package/dist/cjs-legacy/graph.cjs +5420 -0
  21. package/dist/cjs-legacy/hash.cjs +1310 -0
  22. package/dist/cjs-legacy/heap.cjs +1599 -0
  23. package/dist/cjs-legacy/index.cjs +31268 -14679
  24. package/dist/cjs-legacy/linked-list.cjs +4582 -0
  25. package/dist/cjs-legacy/matrix.cjs +1083 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1374 -0
  27. package/dist/cjs-legacy/queue.cjs +4262 -0
  28. package/dist/cjs-legacy/stack.cjs +907 -0
  29. package/dist/cjs-legacy/trie.cjs +1222 -0
  30. package/dist/esm/binary-tree.mjs +26267 -0
  31. package/dist/esm/graph.mjs +5409 -0
  32. package/dist/esm/hash.mjs +1307 -0
  33. package/dist/esm/heap.mjs +1596 -0
  34. package/dist/esm/index.mjs +31254 -14674
  35. package/dist/esm/linked-list.mjs +4569 -0
  36. package/dist/esm/matrix.mjs +1076 -0
  37. package/dist/esm/priority-queue.mjs +1372 -0
  38. package/dist/esm/queue.mjs +4260 -0
  39. package/dist/esm/stack.mjs +905 -0
  40. package/dist/esm/trie.mjs +1220 -0
  41. package/dist/esm-legacy/binary-tree.mjs +26304 -0
  42. package/dist/esm-legacy/graph.mjs +5407 -0
  43. package/dist/esm-legacy/hash.mjs +1307 -0
  44. package/dist/esm-legacy/heap.mjs +1593 -0
  45. package/dist/esm-legacy/index.mjs +31265 -14680
  46. package/dist/esm-legacy/linked-list.mjs +4575 -0
  47. package/dist/esm-legacy/matrix.mjs +1079 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1370 -0
  49. package/dist/esm-legacy/queue.mjs +4258 -0
  50. package/dist/esm-legacy/stack.mjs +905 -0
  51. package/dist/esm-legacy/trie.mjs +1219 -0
  52. package/dist/types/common/error.d.ts +9 -0
  53. package/dist/types/common/index.d.ts +1 -1
  54. package/dist/types/data-structures/base/index.d.ts +1 -0
  55. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  56. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  57. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +288 -0
  58. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +336 -0
  59. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +618 -18
  60. package/dist/types/data-structures/binary-tree/bst.d.ts +676 -1
  61. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +456 -0
  62. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +144 -1
  63. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3307 -399
  64. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3285 -360
  65. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2674 -325
  66. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3072 -287
  67. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  68. package/dist/types/data-structures/graph/directed-graph.d.ts +240 -0
  69. package/dist/types/data-structures/graph/undirected-graph.d.ts +216 -0
  70. package/dist/types/data-structures/hash/hash-map.d.ts +274 -10
  71. package/dist/types/data-structures/heap/heap.d.ts +336 -0
  72. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +411 -3
  73. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +363 -3
  74. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +434 -2
  75. package/dist/types/data-structures/matrix/matrix.d.ts +192 -0
  76. package/dist/types/data-structures/queue/deque.d.ts +364 -4
  77. package/dist/types/data-structures/queue/queue.d.ts +288 -0
  78. package/dist/types/data-structures/stack/stack.d.ts +240 -0
  79. package/dist/types/data-structures/trie/trie.d.ts +292 -4
  80. package/dist/types/interfaces/graph.d.ts +1 -1
  81. package/dist/types/types/common.d.ts +2 -2
  82. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  83. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  84. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  85. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  86. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  87. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  88. package/dist/types/types/utils/validate-type.d.ts +4 -4
  89. package/dist/umd/data-structure-typed.js +31196 -14608
  90. package/dist/umd/data-structure-typed.min.js +11 -5
  91. package/docs-site-docusaurus/README.md +41 -0
  92. package/docs-site-docusaurus/docs/api/README.md +52 -0
  93. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6644 -0
  94. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  95. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  96. package/docs-site-docusaurus/docs/api/classes/BST.md +6293 -0
  97. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  98. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  99. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  100. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  101. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  102. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  103. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  104. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  105. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  106. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  107. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  108. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  109. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  110. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  111. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  112. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  113. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  114. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  115. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  116. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  117. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  118. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  119. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  120. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  121. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  122. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  123. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  124. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  125. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6888 -0
  126. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  127. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  128. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  129. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  130. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  131. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1389 -0
  132. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1591 -0
  133. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1246 -0
  134. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  135. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  136. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  137. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  138. package/docs-site-docusaurus/docs/guide/architecture.md +615 -0
  139. package/docs-site-docusaurus/docs/guide/concepts.md +451 -0
  140. package/docs-site-docusaurus/docs/guide/faq.md +180 -0
  141. package/docs-site-docusaurus/docs/guide/guides.md +597 -0
  142. package/docs-site-docusaurus/docs/guide/installation.md +62 -0
  143. package/docs-site-docusaurus/docs/guide/integrations.md +825 -0
  144. package/docs-site-docusaurus/docs/guide/overview.md +645 -0
  145. package/docs-site-docusaurus/docs/guide/performance.md +835 -0
  146. package/docs-site-docusaurus/docs/guide/quick-start.md +104 -0
  147. package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
  148. package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
  149. package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
  150. package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
  151. package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
  152. package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
  153. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  154. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  155. package/docs-site-docusaurus/package-lock.json +18667 -0
  156. package/docs-site-docusaurus/package.json +50 -0
  157. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  158. package/docs-site-docusaurus/sidebars.ts +23 -0
  159. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  160. package/docs-site-docusaurus/src/css/custom.css +96 -0
  161. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  162. package/docs-site-docusaurus/src/pages/index.tsx +120 -0
  163. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  164. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  165. package/docs-site-docusaurus/static/.nojekyll +0 -0
  166. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  167. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  168. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  169. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  170. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  171. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  172. package/docs-site-docusaurus/static/img/logo.png +0 -0
  173. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  174. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  175. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  176. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  177. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  178. package/docs-site-docusaurus/static/llms.txt +37 -0
  179. package/docs-site-docusaurus/static/robots.txt +4 -0
  180. package/docs-site-docusaurus/typedoc.json +23 -0
  181. package/llms.txt +37 -0
  182. package/package.json +159 -55
  183. package/src/common/error.ts +19 -1
  184. package/src/common/index.ts +1 -1
  185. package/src/data-structures/base/index.ts +1 -0
  186. package/src/data-structures/base/iterable-element-base.ts +3 -2
  187. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  188. package/src/data-structures/base/linear-base.ts +3 -3
  189. package/src/data-structures/binary-tree/avl-tree.ts +287 -0
  190. package/src/data-structures/binary-tree/binary-indexed-tree.ts +327 -5
  191. package/src/data-structures/binary-tree/binary-tree.ts +581 -6
  192. package/src/data-structures/binary-tree/bst.ts +922 -7
  193. package/src/data-structures/binary-tree/red-black-tree.ts +453 -0
  194. package/src/data-structures/binary-tree/segment-tree.ts +139 -2
  195. package/src/data-structures/binary-tree/tree-map.ts +3300 -495
  196. package/src/data-structures/binary-tree/tree-multi-map.ts +3384 -563
  197. package/src/data-structures/binary-tree/tree-multi-set.ts +2757 -493
  198. package/src/data-structures/binary-tree/tree-set.ts +3122 -440
  199. package/src/data-structures/graph/abstract-graph.ts +6 -6
  200. package/src/data-structures/graph/directed-graph.ts +230 -0
  201. package/src/data-structures/graph/undirected-graph.ts +207 -0
  202. package/src/data-structures/hash/hash-map.ts +270 -19
  203. package/src/data-structures/heap/heap.ts +326 -4
  204. package/src/data-structures/heap/max-heap.ts +2 -2
  205. package/src/data-structures/linked-list/doubly-linked-list.ts +394 -3
  206. package/src/data-structures/linked-list/singly-linked-list.ts +348 -3
  207. package/src/data-structures/linked-list/skip-linked-list.ts +421 -7
  208. package/src/data-structures/matrix/matrix.ts +194 -10
  209. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  210. package/src/data-structures/queue/deque.ts +350 -5
  211. package/src/data-structures/queue/queue.ts +276 -0
  212. package/src/data-structures/stack/stack.ts +230 -0
  213. package/src/data-structures/trie/trie.ts +283 -7
  214. package/src/interfaces/graph.ts +1 -1
  215. package/src/types/common.ts +2 -2
  216. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  217. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  218. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  219. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  220. package/src/types/data-structures/heap/heap.ts +1 -0
  221. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  222. package/src/types/utils/validate-type.ts +4 -4
  223. package/vercel.json +6 -0
  224. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  225. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  226. package/dist/leetcode/avl-tree.mjs +0 -2720
  227. package/dist/leetcode/binary-tree.mjs +0 -1594
  228. package/dist/leetcode/bst.mjs +0 -2398
  229. package/dist/leetcode/deque.mjs +0 -683
  230. package/dist/leetcode/directed-graph.mjs +0 -1733
  231. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  232. package/dist/leetcode/hash-map.mjs +0 -493
  233. package/dist/leetcode/heap.mjs +0 -542
  234. package/dist/leetcode/max-heap.mjs +0 -375
  235. package/dist/leetcode/max-priority-queue.mjs +0 -383
  236. package/dist/leetcode/min-heap.mjs +0 -363
  237. package/dist/leetcode/min-priority-queue.mjs +0 -371
  238. package/dist/leetcode/priority-queue.mjs +0 -363
  239. package/dist/leetcode/queue.mjs +0 -943
  240. package/dist/leetcode/red-black-tree.mjs +0 -2765
  241. package/dist/leetcode/singly-linked-list.mjs +0 -754
  242. package/dist/leetcode/stack.mjs +0 -217
  243. package/dist/leetcode/tree-counter.mjs +0 -3039
  244. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  245. package/dist/leetcode/trie.mjs +0 -413
  246. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -0,0 +1,905 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+
6
+ // src/common/error.ts
7
+ function raise(ErrorClass, message) {
8
+ throw new ErrorClass(message);
9
+ }
10
+ __name(raise, "raise");
11
+
12
+ // src/data-structures/base/iterable-element-base.ts
13
+ var _IterableElementBase = class _IterableElementBase {
14
+ /**
15
+ * Create a new iterable base.
16
+ *
17
+ * @param options Optional behavior overrides. When provided, a `toElementFn`
18
+ * is used to convert a raw element (`R`) into a public element (`E`).
19
+ *
20
+ * @remarks
21
+ * Time O(1), Space O(1).
22
+ */
23
+ constructor(options) {
24
+ /**
25
+ * The converter used to transform a raw element (`R`) into a public element (`E`).
26
+ *
27
+ * @remarks
28
+ * Time O(1), Space O(1).
29
+ */
30
+ __publicField(this, "_toElementFn");
31
+ if (options) {
32
+ const { toElementFn } = options;
33
+ if (typeof toElementFn === "function") this._toElementFn = toElementFn;
34
+ else if (toElementFn) raise(TypeError, "toElementFn must be a function type");
35
+ }
36
+ }
37
+ /**
38
+ * Exposes the current `toElementFn`, if configured.
39
+ *
40
+ * @returns The converter function or `undefined` when not set.
41
+ * @remarks
42
+ * Time O(1), Space O(1).
43
+ */
44
+ get toElementFn() {
45
+ return this._toElementFn;
46
+ }
47
+ /**
48
+ * Returns an iterator over the structure's elements.
49
+ *
50
+ * @param args Optional iterator arguments forwarded to the internal iterator.
51
+ * @returns An `IterableIterator<E>` that yields the elements in traversal order.
52
+ *
53
+ * @remarks
54
+ * Producing the iterator is O(1); consuming the entire iterator is Time O(n) with O(1) extra space.
55
+ */
56
+ *[Symbol.iterator](...args) {
57
+ yield* this._getIterator(...args);
58
+ }
59
+ /**
60
+ * Returns an iterator over the values (alias of the default iterator).
61
+ *
62
+ * @returns An `IterableIterator<E>` over all elements.
63
+ * @remarks
64
+ * Creating the iterator is O(1); full iteration is Time O(n), Space O(1).
65
+ */
66
+ *values() {
67
+ for (const item of this) yield item;
68
+ }
69
+ /**
70
+ * Tests whether all elements satisfy the predicate.
71
+ *
72
+ * @template TReturn
73
+ * @param predicate Function invoked for each element with signature `(value, index, self)`.
74
+ * @param thisArg Optional `this` binding for the predicate.
75
+ * @returns `true` if every element passes; otherwise `false`.
76
+ *
77
+ * @remarks
78
+ * Time O(n) in the worst case; may exit early when the first failure is found. Space O(1).
79
+ */
80
+ every(predicate, thisArg) {
81
+ let index = 0;
82
+ for (const item of this) {
83
+ if (thisArg === void 0) {
84
+ if (!predicate(item, index++, this)) return false;
85
+ } else {
86
+ const fn = predicate;
87
+ if (!fn.call(thisArg, item, index++, this)) return false;
88
+ }
89
+ }
90
+ return true;
91
+ }
92
+ /**
93
+ * Tests whether at least one element satisfies the predicate.
94
+ *
95
+ * @param predicate Function invoked for each element with signature `(value, index, self)`.
96
+ * @param thisArg Optional `this` binding for the predicate.
97
+ * @returns `true` if any element passes; otherwise `false`.
98
+ *
99
+ * @remarks
100
+ * Time O(n) in the worst case; may exit early on first success. Space O(1).
101
+ */
102
+ some(predicate, thisArg) {
103
+ let index = 0;
104
+ for (const item of this) {
105
+ if (thisArg === void 0) {
106
+ if (predicate(item, index++, this)) return true;
107
+ } else {
108
+ const fn = predicate;
109
+ if (fn.call(thisArg, item, index++, this)) return true;
110
+ }
111
+ }
112
+ return false;
113
+ }
114
+ /**
115
+ * Invokes a callback for each element in iteration order.
116
+ *
117
+ * @param callbackfn Function invoked per element with signature `(value, index, self)`.
118
+ * @param thisArg Optional `this` binding for the callback.
119
+ * @returns `void`.
120
+ *
121
+ * @remarks
122
+ * Time O(n), Space O(1).
123
+ */
124
+ forEach(callbackfn, thisArg) {
125
+ let index = 0;
126
+ for (const item of this) {
127
+ if (thisArg === void 0) {
128
+ callbackfn(item, index++, this);
129
+ } else {
130
+ const fn = callbackfn;
131
+ fn.call(thisArg, item, index++, this);
132
+ }
133
+ }
134
+ }
135
+ // Implementation signature
136
+ find(predicate, thisArg) {
137
+ let index = 0;
138
+ for (const item of this) {
139
+ if (thisArg === void 0) {
140
+ if (predicate(item, index++, this)) return item;
141
+ } else {
142
+ const fn = predicate;
143
+ if (fn.call(thisArg, item, index++, this)) return item;
144
+ }
145
+ }
146
+ return;
147
+ }
148
+ /**
149
+ * Checks whether a strictly-equal element exists in the structure.
150
+ *
151
+ * @param element The element to test with `===` equality.
152
+ * @returns `true` if an equal element is found; otherwise `false`.
153
+ *
154
+ * @remarks
155
+ * Time O(n) in the worst case. Space O(1).
156
+ */
157
+ has(element) {
158
+ for (const ele of this) if (ele === element) return true;
159
+ return false;
160
+ }
161
+ /**
162
+ * Reduces all elements to a single accumulated value.
163
+ *
164
+ * @overload
165
+ * @param callbackfn Reducer of signature `(acc, value, index, self) => nextAcc`. The first element is used as the initial accumulator.
166
+ * @returns The final accumulated value typed as `E`.
167
+ *
168
+ * @overload
169
+ * @param callbackfn Reducer of signature `(acc, value, index, self) => nextAcc`.
170
+ * @param initialValue The initial accumulator value of type `E`.
171
+ * @returns The final accumulated value typed as `E`.
172
+ *
173
+ * @overload
174
+ * @template U The accumulator type when it differs from `E`.
175
+ * @param callbackfn Reducer of signature `(acc: U, value, index, self) => U`.
176
+ * @param initialValue The initial accumulator value of type `U`.
177
+ * @returns The final accumulated value typed as `U`.
178
+ *
179
+ * @remarks
180
+ * Time O(n), Space O(1). Throws if called on an empty structure without `initialValue`.
181
+ */
182
+ reduce(callbackfn, initialValue) {
183
+ let index = 0;
184
+ const iter = this[Symbol.iterator]();
185
+ let acc;
186
+ if (arguments.length >= 2) {
187
+ acc = initialValue;
188
+ } else {
189
+ const first = iter.next();
190
+ if (first.done) raise(TypeError, "Reduce of empty structure with no initial value");
191
+ acc = first.value;
192
+ index = 1;
193
+ }
194
+ for (const value of iter) {
195
+ acc = callbackfn(acc, value, index++, this);
196
+ }
197
+ return acc;
198
+ }
199
+ /**
200
+ * Materializes the elements into a new array.
201
+ *
202
+ * @returns A shallow array copy of the iteration order.
203
+ * @remarks
204
+ * Time O(n), Space O(n).
205
+ */
206
+ toArray() {
207
+ return [...this];
208
+ }
209
+ /**
210
+ * Returns a representation of the structure suitable for quick visualization.
211
+ * Defaults to an array of elements; subclasses may override to provide richer visuals.
212
+ *
213
+ * @returns A visual representation (array by default).
214
+ * @remarks
215
+ * Time O(n), Space O(n).
216
+ */
217
+ toVisual() {
218
+ return [...this];
219
+ }
220
+ /**
221
+ * Prints `toVisual()` to the console. Intended for quick debugging.
222
+ *
223
+ * @returns `void`.
224
+ * @remarks
225
+ * Time O(n) due to materialization, Space O(n) for the intermediate representation.
226
+ */
227
+ print() {
228
+ console.log(this.toVisual());
229
+ }
230
+ };
231
+ __name(_IterableElementBase, "IterableElementBase");
232
+ var IterableElementBase = _IterableElementBase;
233
+
234
+ // src/data-structures/stack/stack.ts
235
+ var _Stack = class _Stack extends IterableElementBase {
236
+ /**
237
+ * Create a Stack and optionally bulk-push elements.
238
+ * @remarks Time O(N), Space O(N)
239
+ * @param [elements] - Iterable of elements (or raw records if toElementFn is set).
240
+ * @param [options] - Options such as toElementFn and equality function.
241
+ * @returns New Stack instance.
242
+ */
243
+ constructor(elements = [], options) {
244
+ super(options);
245
+ __publicField(this, "_equals", /* @__PURE__ */ __name((a, b) => Object.is(a, b), "_equals"));
246
+ __publicField(this, "_elements", []);
247
+ this.pushMany(elements);
248
+ }
249
+ /**
250
+ * Get the backing array of elements.
251
+ * @remarks Time O(1), Space O(1)
252
+ * @returns Internal elements array.
253
+ */
254
+ get elements() {
255
+ return this._elements;
256
+ }
257
+ /**
258
+ * Get the number of stored elements.
259
+ * @remarks Time O(1), Space O(1)
260
+ * @returns Current size.
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+ * @example
295
+ * // Get number of elements
296
+ * const stack = new Stack<number>([1, 2, 3]);
297
+ * console.log(stack.size); // 3;
298
+ */
299
+ get size() {
300
+ return this.elements.length;
301
+ }
302
+ /**
303
+ * Create a stack from an array of elements.
304
+ * @remarks Time O(N), Space O(N)
305
+ * @template E
306
+ * @template R
307
+ * @param this - The constructor (subclass) to instantiate.
308
+ * @param elements - Array of elements to push in order.
309
+ * @param [options] - Options forwarded to the constructor.
310
+ * @returns A new Stack populated from the array.
311
+ */
312
+ static fromArray(elements, options) {
313
+ return new this(elements, options);
314
+ }
315
+ /**
316
+ * Check whether the stack is empty.
317
+ * @remarks Time O(1), Space O(1)
318
+ * @returns True if size is 0.
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+ * @example
355
+ * // Check if stack has elements
356
+ * const stack = new Stack<number>();
357
+ * console.log(stack.isEmpty()); // true;
358
+ * stack.push(1);
359
+ * console.log(stack.isEmpty()); // false;
360
+ */
361
+ isEmpty() {
362
+ return this.elements.length === 0;
363
+ }
364
+ /**
365
+ * Get the top element without removing it.
366
+ * @remarks Time O(1), Space O(1)
367
+ * @returns Top element or undefined.
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+ * @example
404
+ * // View the top element without removing it
405
+ * const stack = new Stack<string>(['a', 'b', 'c']);
406
+ * console.log(stack.peek()); // 'c';
407
+ * console.log(stack.size); // 3;
408
+ */
409
+ peek() {
410
+ return this.isEmpty() ? void 0 : this.elements[this.elements.length - 1];
411
+ }
412
+ /**
413
+ * Push one element onto the top.
414
+ * @remarks Time O(1), Space O(1)
415
+ * @param element - Element to push.
416
+ * @returns True when pushed.
417
+
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+ * @example
453
+ * // basic Stack creation and push operation
454
+ * // Create a simple Stack with initial values
455
+ * const stack = new Stack([1, 2, 3, 4, 5]);
456
+ *
457
+ * // Verify the stack maintains insertion order (LIFO will be shown in pop)
458
+ * console.log([...stack]); // [1, 2, 3, 4, 5];
459
+ *
460
+ * // Check length
461
+ * console.log(stack.size); // 5;
462
+ *
463
+ * // Push a new element to the top
464
+ * stack.push(6);
465
+ * console.log(stack.size); // 6;
466
+ */
467
+ push(element) {
468
+ this.elements.push(element);
469
+ return true;
470
+ }
471
+ /**
472
+ * Pop and return the top element.
473
+ * @remarks Time O(1), Space O(1)
474
+ * @returns Removed element or undefined.
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+ * @example
511
+ * // Stack pop operation (LIFO - Last In First Out)
512
+ * const stack = new Stack<number>([10, 20, 30, 40, 50]);
513
+ *
514
+ * // Peek at the top element without removing
515
+ * const top = stack.peek();
516
+ * console.log(top); // 50;
517
+ *
518
+ * // Pop removes from the top (LIFO order)
519
+ * const popped = stack.pop();
520
+ * console.log(popped); // 50;
521
+ *
522
+ * // Next pop gets the previous element
523
+ * const next = stack.pop();
524
+ * console.log(next); // 40;
525
+ *
526
+ * // Verify length decreased
527
+ * console.log(stack.size); // 3;
528
+ */
529
+ pop() {
530
+ return this.isEmpty() ? void 0 : this.elements.pop();
531
+ }
532
+ /**
533
+ * Push many elements from an iterable.
534
+ * @remarks Time O(N), Space O(1)
535
+ * @param elements - Iterable of elements (or raw records if toElementFn is set).
536
+ * @returns Array of per-element success flags.
537
+ */
538
+ pushMany(elements) {
539
+ const ans = [];
540
+ for (const el of elements) {
541
+ if (this.toElementFn) ans.push(this.push(this.toElementFn(el)));
542
+ else ans.push(this.push(el));
543
+ }
544
+ return ans;
545
+ }
546
+ /**
547
+ * Delete the first occurrence of a specific element.
548
+ * @remarks Time O(N), Space O(1)
549
+ * @param element - Element to remove (using the configured equality).
550
+ * @returns True if an element was removed.
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+ * @example
584
+ * // Remove element
585
+ * const stack = new Stack<number>([1, 2, 3]);
586
+ * stack.delete(2);
587
+ * console.log(stack.toArray()); // [1, 3];
588
+ */
589
+ delete(element) {
590
+ const idx = this._indexOfByEquals(element);
591
+ return this.deleteAt(idx);
592
+ }
593
+ /**
594
+ * Delete the element at an index.
595
+ * @remarks Time O(N), Space O(1)
596
+ * @param index - Zero-based index from the bottom.
597
+ * @returns True if removed.
598
+ */
599
+ deleteAt(index) {
600
+ if (index < 0 || index >= this.elements.length) return false;
601
+ const spliced = this.elements.splice(index, 1);
602
+ return spliced.length === 1;
603
+ }
604
+ /**
605
+ * Delete the first element that satisfies a predicate.
606
+ * @remarks Time O(N), Space O(1)
607
+ * @param predicate - Function (value, index, stack) → boolean to decide deletion.
608
+ * @returns True if a match was removed.
609
+ */
610
+ deleteWhere(predicate) {
611
+ for (let i = 0; i < this.elements.length; i++) {
612
+ if (predicate(this.elements[i], i, this)) {
613
+ this.elements.splice(i, 1);
614
+ return true;
615
+ }
616
+ }
617
+ return false;
618
+ }
619
+ /**
620
+ * Remove all elements and reset storage.
621
+ * @remarks Time O(1), Space O(1)
622
+ * @returns void
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+ * @example
657
+ * // Remove all elements
658
+ * const stack = new Stack<number>([1, 2, 3]);
659
+ * stack.clear();
660
+ * console.log(stack.isEmpty()); // true;
661
+ */
662
+ clear() {
663
+ this._elements = [];
664
+ }
665
+ /**
666
+ * Deep clone this stack.
667
+ * @remarks Time O(N), Space O(N)
668
+ * @returns A new stack with the same content.
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+ * @example
703
+ * // Create independent copy
704
+ * const stack = new Stack<number>([1, 2, 3]);
705
+ * const copy = stack.clone();
706
+ * copy.pop();
707
+ * console.log(stack.size); // 3;
708
+ * console.log(copy.size); // 2;
709
+ */
710
+ clone() {
711
+ const out = this._createInstance({ toElementFn: this.toElementFn });
712
+ for (const v of this) out.push(v);
713
+ return out;
714
+ }
715
+ /**
716
+ * Filter elements into a new stack of the same class.
717
+ * @remarks Time O(N), Space O(N)
718
+ * @param predicate - Predicate (value, index, stack) → boolean to keep value.
719
+ * @param [thisArg] - Value for `this` inside the predicate.
720
+ * @returns A new stack with kept values.
721
+
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+ * @example
755
+ * // Filter elements
756
+ * const stack = new Stack<number>([1, 2, 3, 4, 5]);
757
+ * const evens = stack.filter(x => x % 2 === 0);
758
+ * console.log(evens.toArray()); // [2, 4];
759
+ */
760
+ filter(predicate, thisArg) {
761
+ const out = this._createInstance({ toElementFn: this.toElementFn });
762
+ let index = 0;
763
+ for (const v of this) {
764
+ if (predicate.call(thisArg, v, index, this)) out.push(v);
765
+ index++;
766
+ }
767
+ return out;
768
+ }
769
+ /**
770
+ * Map values into a new stack of the same element type.
771
+ * @remarks Time O(N), Space O(N)
772
+ * @param callback - Mapping function (value, index, stack) → newValue.
773
+ * @param [thisArg] - Value for `this` inside the callback.
774
+ * @returns A new stack with mapped values.
775
+ */
776
+ mapSame(callback, thisArg) {
777
+ const out = this._createInstance({ toElementFn: this.toElementFn });
778
+ let index = 0;
779
+ for (const v of this) {
780
+ const mv = thisArg === void 0 ? callback(v, index++, this) : callback.call(thisArg, v, index++, this);
781
+ out.push(mv);
782
+ }
783
+ return out;
784
+ }
785
+ /**
786
+ * Map values into a new stack (possibly different element type).
787
+ * @remarks Time O(N), Space O(N)
788
+ * @template EM
789
+ * @template RM
790
+ * @param callback - Mapping function (value, index, stack) → newElement.
791
+ * @param [options] - Options for the output stack (e.g., toElementFn).
792
+ * @param [thisArg] - Value for `this` inside the callback.
793
+ * @returns A new Stack with mapped elements.
794
+
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+
803
+
804
+
805
+
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+ * @example
827
+ * // Transform elements
828
+ * const stack = new Stack<number>([1, 2, 3]);
829
+ * const doubled = stack.map(x => x * 2);
830
+ * console.log(doubled.toArray()); // [2, 4, 6];
831
+ */
832
+ map(callback, options, thisArg) {
833
+ const out = this._createLike([], { ...options != null ? options : {} });
834
+ let index = 0;
835
+ for (const v of this) {
836
+ out.push(thisArg === void 0 ? callback(v, index, this) : callback.call(thisArg, v, index, this));
837
+ index++;
838
+ }
839
+ return out;
840
+ }
841
+ /**
842
+ * Set the equality comparator used by delete/search operations.
843
+ * @remarks Time O(1), Space O(1)
844
+ * @param equals - Equality predicate (a, b) → boolean.
845
+ * @returns This stack.
846
+ */
847
+ setEquality(equals) {
848
+ this._equals = equals;
849
+ return this;
850
+ }
851
+ /**
852
+ * (Protected) Find the index of a target element using the equality function.
853
+ * @remarks Time O(N), Space O(1)
854
+ * @param target - Element to search for.
855
+ * @returns Index or -1 if not found.
856
+ */
857
+ _indexOfByEquals(target) {
858
+ for (let i = 0; i < this.elements.length; i++) if (this._equals(this.elements[i], target)) return i;
859
+ return -1;
860
+ }
861
+ /**
862
+ * (Protected) Create an empty instance of the same concrete class.
863
+ * @remarks Time O(1), Space O(1)
864
+ * @param [options] - Options forwarded to the constructor.
865
+ * @returns An empty like-kind stack instance.
866
+ */
867
+ _createInstance(options) {
868
+ const Ctor = this.constructor;
869
+ return new Ctor([], options);
870
+ }
871
+ /**
872
+ * (Protected) Create a like-kind stack and seed it from an iterable.
873
+ * @remarks Time O(N), Space O(N)
874
+ * @template T
875
+ * @template RR
876
+ * @param [elements] - Iterable used to seed the new stack.
877
+ * @param [options] - Options forwarded to the constructor.
878
+ * @returns A like-kind Stack instance.
879
+ */
880
+ _createLike(elements = [], options) {
881
+ const Ctor = this.constructor;
882
+ return new Ctor(elements, options);
883
+ }
884
+ /**
885
+ * (Protected) Iterate elements from bottom to top.
886
+ * @remarks Time O(N), Space O(1)
887
+ * @returns Iterator of elements.
888
+ */
889
+ *_getIterator() {
890
+ for (let i = 0; i < this.elements.length; i++) yield this.elements[i];
891
+ }
892
+ };
893
+ __name(_Stack, "Stack");
894
+ var Stack = _Stack;
895
+ /**
896
+ * data-structure-typed
897
+ *
898
+ * @author Pablo Zeng
899
+ * @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
900
+ * @license MIT License
901
+ */
902
+
903
+ export { Stack };
904
+ //# sourceMappingURL=stack.mjs.map
905
+ //# sourceMappingURL=stack.mjs.map