data-structure-typed 2.4.5 → 2.5.1

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