data-structure-typed 2.5.0 → 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 (222) 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 +63 -26
  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 +28244 -14795
  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 +28239 -14790
  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 +28242 -14796
  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 +28237 -14791
  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-entry-base.d.ts +8 -8
  54. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  55. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +240 -0
  56. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +280 -0
  57. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +502 -2
  58. package/dist/types/data-structures/binary-tree/bst.d.ts +481 -1
  59. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +380 -0
  60. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +120 -1
  61. package/dist/types/data-structures/binary-tree/tree-map.d.ts +2764 -384
  62. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2753 -353
  63. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2241 -321
  64. package/dist/types/data-structures/binary-tree/tree-set.d.ts +2554 -274
  65. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  66. package/dist/types/data-structures/graph/directed-graph.d.ts +200 -0
  67. package/dist/types/data-structures/graph/undirected-graph.d.ts +180 -0
  68. package/dist/types/data-structures/hash/hash-map.d.ts +230 -10
  69. package/dist/types/data-structures/heap/heap.d.ts +280 -0
  70. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +343 -3
  71. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +303 -3
  72. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +362 -2
  73. package/dist/types/data-structures/matrix/matrix.d.ts +160 -0
  74. package/dist/types/data-structures/queue/deque.d.ts +304 -4
  75. package/dist/types/data-structures/queue/queue.d.ts +240 -0
  76. package/dist/types/data-structures/stack/stack.d.ts +200 -0
  77. package/dist/types/data-structures/trie/trie.d.ts +244 -4
  78. package/dist/types/interfaces/graph.d.ts +1 -1
  79. package/dist/types/types/common.d.ts +2 -2
  80. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  81. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  82. package/dist/types/types/utils/validate-type.d.ts +4 -4
  83. package/dist/umd/data-structure-typed.js +28022 -14573
  84. package/dist/umd/data-structure-typed.min.js +9 -3
  85. package/docs-site-docusaurus/README.md +41 -0
  86. package/docs-site-docusaurus/docs/api/README.md +52 -0
  87. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6130 -0
  88. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  89. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  90. package/docs-site-docusaurus/docs/api/classes/BST.md +5831 -0
  91. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  92. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  93. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  94. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  95. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  96. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  97. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  98. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  99. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  100. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  101. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  102. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  103. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  104. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  105. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  106. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  107. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  108. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  109. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  110. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  111. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  112. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  113. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  114. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  115. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  116. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  117. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  118. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  119. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6374 -0
  120. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  121. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  122. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  123. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  124. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  125. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1257 -0
  126. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1475 -0
  127. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1117 -0
  128. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  129. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  130. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  131. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  132. package/docs-site-docusaurus/docs/guide/architecture.md +613 -0
  133. package/docs-site-docusaurus/docs/guide/concepts.md +420 -0
  134. package/docs-site-docusaurus/docs/guide/guides.md +611 -0
  135. package/docs-site-docusaurus/docs/guide/installation.md +60 -0
  136. package/docs-site-docusaurus/docs/guide/integrations.md +823 -0
  137. package/docs-site-docusaurus/docs/guide/overview.md +638 -0
  138. package/docs-site-docusaurus/docs/guide/performance.md +833 -0
  139. package/docs-site-docusaurus/docs/guide/quick-start.md +73 -0
  140. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  141. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  142. package/docs-site-docusaurus/package-lock.json +18667 -0
  143. package/docs-site-docusaurus/package.json +50 -0
  144. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  145. package/docs-site-docusaurus/sidebars.ts +23 -0
  146. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  147. package/docs-site-docusaurus/src/css/custom.css +96 -0
  148. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  149. package/docs-site-docusaurus/src/pages/index.tsx +71 -0
  150. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  151. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  152. package/docs-site-docusaurus/static/.nojekyll +0 -0
  153. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  154. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  155. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  156. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  157. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  158. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  159. package/docs-site-docusaurus/static/img/logo.png +0 -0
  160. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  161. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  162. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  163. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  164. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  165. package/docs-site-docusaurus/static/robots.txt +4 -0
  166. package/docs-site-docusaurus/typedoc.json +23 -0
  167. package/package.json +106 -10
  168. package/src/data-structures/base/index.ts +1 -0
  169. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  170. package/src/data-structures/base/linear-base.ts +3 -3
  171. package/src/data-structures/binary-tree/avl-tree.ts +240 -0
  172. package/src/data-structures/binary-tree/binary-indexed-tree.ts +281 -1
  173. package/src/data-structures/binary-tree/binary-tree.ts +502 -2
  174. package/src/data-structures/binary-tree/bst.ts +481 -1
  175. package/src/data-structures/binary-tree/red-black-tree.ts +380 -0
  176. package/src/data-structures/binary-tree/segment-tree.ts +121 -2
  177. package/src/data-structures/binary-tree/tree-map.ts +2862 -482
  178. package/src/data-structures/binary-tree/tree-multi-map.ts +2963 -563
  179. package/src/data-structures/binary-tree/tree-multi-set.ts +2399 -479
  180. package/src/data-structures/binary-tree/tree-set.ts +2685 -405
  181. package/src/data-structures/graph/abstract-graph.ts +4 -4
  182. package/src/data-structures/graph/directed-graph.ts +200 -0
  183. package/src/data-structures/graph/undirected-graph.ts +180 -0
  184. package/src/data-structures/hash/hash-map.ts +235 -15
  185. package/src/data-structures/heap/heap.ts +280 -0
  186. package/src/data-structures/linked-list/doubly-linked-list.ts +343 -3
  187. package/src/data-structures/linked-list/singly-linked-list.ts +303 -3
  188. package/src/data-structures/linked-list/skip-linked-list.ts +362 -2
  189. package/src/data-structures/matrix/matrix.ts +161 -1
  190. package/src/data-structures/queue/deque.ts +305 -5
  191. package/src/data-structures/queue/queue.ts +240 -0
  192. package/src/data-structures/stack/stack.ts +200 -0
  193. package/src/data-structures/trie/trie.ts +245 -5
  194. package/src/interfaces/graph.ts +1 -1
  195. package/src/types/common.ts +2 -2
  196. package/src/types/data-structures/heap/heap.ts +1 -0
  197. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  198. package/src/types/utils/validate-type.ts +4 -4
  199. package/vercel.json +6 -0
  200. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  201. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  202. package/dist/leetcode/avl-tree.mjs +0 -2720
  203. package/dist/leetcode/binary-tree.mjs +0 -1594
  204. package/dist/leetcode/bst.mjs +0 -2398
  205. package/dist/leetcode/deque.mjs +0 -683
  206. package/dist/leetcode/directed-graph.mjs +0 -1733
  207. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  208. package/dist/leetcode/hash-map.mjs +0 -493
  209. package/dist/leetcode/heap.mjs +0 -542
  210. package/dist/leetcode/max-heap.mjs +0 -375
  211. package/dist/leetcode/max-priority-queue.mjs +0 -383
  212. package/dist/leetcode/min-heap.mjs +0 -363
  213. package/dist/leetcode/min-priority-queue.mjs +0 -371
  214. package/dist/leetcode/priority-queue.mjs +0 -363
  215. package/dist/leetcode/queue.mjs +0 -943
  216. package/dist/leetcode/red-black-tree.mjs +0 -2765
  217. package/dist/leetcode/singly-linked-list.mjs +0 -754
  218. package/dist/leetcode/stack.mjs +0 -217
  219. package/dist/leetcode/tree-counter.mjs +0 -3039
  220. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  221. package/dist/leetcode/trie.mjs +0 -413
  222. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -0,0 +1,859 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/data-structures/base/iterable-element-base.ts
5
+ var IterableElementBase = class {
6
+ static {
7
+ __name(this, "IterableElementBase");
8
+ }
9
+ /**
10
+ * Create a new iterable base.
11
+ *
12
+ * @param options Optional behavior overrides. When provided, a `toElementFn`
13
+ * is used to convert a raw element (`R`) into a public element (`E`).
14
+ *
15
+ * @remarks
16
+ * Time O(1), Space O(1).
17
+ */
18
+ constructor(options) {
19
+ if (options) {
20
+ const { toElementFn } = options;
21
+ if (typeof toElementFn === "function") this._toElementFn = toElementFn;
22
+ else if (toElementFn) throw new TypeError("toElementFn must be a function type");
23
+ }
24
+ }
25
+ /**
26
+ * The converter used to transform a raw element (`R`) into a public element (`E`).
27
+ *
28
+ * @remarks
29
+ * Time O(1), Space O(1).
30
+ */
31
+ _toElementFn;
32
+ /**
33
+ * Exposes the current `toElementFn`, if configured.
34
+ *
35
+ * @returns The converter function or `undefined` when not set.
36
+ * @remarks
37
+ * Time O(1), Space O(1).
38
+ */
39
+ get toElementFn() {
40
+ return this._toElementFn;
41
+ }
42
+ /**
43
+ * Returns an iterator over the structure's elements.
44
+ *
45
+ * @param args Optional iterator arguments forwarded to the internal iterator.
46
+ * @returns An `IterableIterator<E>` that yields the elements in traversal order.
47
+ *
48
+ * @remarks
49
+ * Producing the iterator is O(1); consuming the entire iterator is Time O(n) with O(1) extra space.
50
+ */
51
+ *[Symbol.iterator](...args) {
52
+ yield* this._getIterator(...args);
53
+ }
54
+ /**
55
+ * Returns an iterator over the values (alias of the default iterator).
56
+ *
57
+ * @returns An `IterableIterator<E>` over all elements.
58
+ * @remarks
59
+ * Creating the iterator is O(1); full iteration is Time O(n), Space O(1).
60
+ */
61
+ *values() {
62
+ for (const item of this) yield item;
63
+ }
64
+ /**
65
+ * Tests whether all elements satisfy the predicate.
66
+ *
67
+ * @template TReturn
68
+ * @param predicate Function invoked for each element with signature `(value, index, self)`.
69
+ * @param thisArg Optional `this` binding for the predicate.
70
+ * @returns `true` if every element passes; otherwise `false`.
71
+ *
72
+ * @remarks
73
+ * Time O(n) in the worst case; may exit early when the first failure is found. Space O(1).
74
+ */
75
+ every(predicate, thisArg) {
76
+ let index = 0;
77
+ for (const item of this) {
78
+ if (thisArg === void 0) {
79
+ if (!predicate(item, index++, this)) return false;
80
+ } else {
81
+ const fn = predicate;
82
+ if (!fn.call(thisArg, item, index++, this)) return false;
83
+ }
84
+ }
85
+ return true;
86
+ }
87
+ /**
88
+ * Tests whether at least one element satisfies the predicate.
89
+ *
90
+ * @param predicate Function invoked for each element with signature `(value, index, self)`.
91
+ * @param thisArg Optional `this` binding for the predicate.
92
+ * @returns `true` if any element passes; otherwise `false`.
93
+ *
94
+ * @remarks
95
+ * Time O(n) in the worst case; may exit early on first success. Space O(1).
96
+ */
97
+ some(predicate, thisArg) {
98
+ let index = 0;
99
+ for (const item of this) {
100
+ if (thisArg === void 0) {
101
+ if (predicate(item, index++, this)) return true;
102
+ } else {
103
+ const fn = predicate;
104
+ if (fn.call(thisArg, item, index++, this)) return true;
105
+ }
106
+ }
107
+ return false;
108
+ }
109
+ /**
110
+ * Invokes a callback for each element in iteration order.
111
+ *
112
+ * @param callbackfn Function invoked per element with signature `(value, index, self)`.
113
+ * @param thisArg Optional `this` binding for the callback.
114
+ * @returns `void`.
115
+ *
116
+ * @remarks
117
+ * Time O(n), Space O(1).
118
+ */
119
+ forEach(callbackfn, thisArg) {
120
+ let index = 0;
121
+ for (const item of this) {
122
+ if (thisArg === void 0) {
123
+ callbackfn(item, index++, this);
124
+ } else {
125
+ const fn = callbackfn;
126
+ fn.call(thisArg, item, index++, this);
127
+ }
128
+ }
129
+ }
130
+ // Implementation signature
131
+ find(predicate, thisArg) {
132
+ let index = 0;
133
+ for (const item of this) {
134
+ if (thisArg === void 0) {
135
+ if (predicate(item, index++, this)) return item;
136
+ } else {
137
+ const fn = predicate;
138
+ if (fn.call(thisArg, item, index++, this)) return item;
139
+ }
140
+ }
141
+ return;
142
+ }
143
+ /**
144
+ * Checks whether a strictly-equal element exists in the structure.
145
+ *
146
+ * @param element The element to test with `===` equality.
147
+ * @returns `true` if an equal element is found; otherwise `false`.
148
+ *
149
+ * @remarks
150
+ * Time O(n) in the worst case. Space O(1).
151
+ */
152
+ has(element) {
153
+ for (const ele of this) if (ele === element) return true;
154
+ return false;
155
+ }
156
+ /**
157
+ * Reduces all elements to a single accumulated value.
158
+ *
159
+ * @overload
160
+ * @param callbackfn Reducer of signature `(acc, value, index, self) => nextAcc`. The first element is used as the initial accumulator.
161
+ * @returns The final accumulated value typed as `E`.
162
+ *
163
+ * @overload
164
+ * @param callbackfn Reducer of signature `(acc, value, index, self) => nextAcc`.
165
+ * @param initialValue The initial accumulator value of type `E`.
166
+ * @returns The final accumulated value typed as `E`.
167
+ *
168
+ * @overload
169
+ * @template U The accumulator type when it differs from `E`.
170
+ * @param callbackfn Reducer of signature `(acc: U, value, index, self) => U`.
171
+ * @param initialValue The initial accumulator value of type `U`.
172
+ * @returns The final accumulated value typed as `U`.
173
+ *
174
+ * @remarks
175
+ * Time O(n), Space O(1). Throws if called on an empty structure without `initialValue`.
176
+ */
177
+ reduce(callbackfn, initialValue) {
178
+ let index = 0;
179
+ const iter = this[Symbol.iterator]();
180
+ let acc;
181
+ if (arguments.length >= 2) {
182
+ acc = initialValue;
183
+ } else {
184
+ const first = iter.next();
185
+ if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
186
+ acc = first.value;
187
+ index = 1;
188
+ }
189
+ for (const value of iter) {
190
+ acc = callbackfn(acc, value, index++, this);
191
+ }
192
+ return acc;
193
+ }
194
+ /**
195
+ * Materializes the elements into a new array.
196
+ *
197
+ * @returns A shallow array copy of the iteration order.
198
+ * @remarks
199
+ * Time O(n), Space O(n).
200
+ */
201
+ toArray() {
202
+ return [...this];
203
+ }
204
+ /**
205
+ * Returns a representation of the structure suitable for quick visualization.
206
+ * Defaults to an array of elements; subclasses may override to provide richer visuals.
207
+ *
208
+ * @returns A visual representation (array by default).
209
+ * @remarks
210
+ * Time O(n), Space O(n).
211
+ */
212
+ toVisual() {
213
+ return [...this];
214
+ }
215
+ /**
216
+ * Prints `toVisual()` to the console. Intended for quick debugging.
217
+ *
218
+ * @returns `void`.
219
+ * @remarks
220
+ * Time O(n) due to materialization, Space O(n) for the intermediate representation.
221
+ */
222
+ print() {
223
+ console.log(this.toVisual());
224
+ }
225
+ };
226
+
227
+ // src/data-structures/stack/stack.ts
228
+ var Stack = class extends IterableElementBase {
229
+ static {
230
+ __name(this, "Stack");
231
+ }
232
+ _equals = /* @__PURE__ */ __name((a, b) => Object.is(a, b), "_equals");
233
+ /**
234
+ * Create a Stack and optionally bulk-push elements.
235
+ * @remarks Time O(N), Space O(N)
236
+ * @param [elements] - Iterable of elements (or raw records if toElementFn is set).
237
+ * @param [options] - Options such as toElementFn and equality function.
238
+ * @returns New Stack instance.
239
+ */
240
+ constructor(elements = [], options) {
241
+ super(options);
242
+ this.pushMany(elements);
243
+ }
244
+ _elements = [];
245
+ /**
246
+ * Get the backing array of elements.
247
+ * @remarks Time O(1), Space O(1)
248
+ * @returns Internal elements array.
249
+ */
250
+ get elements() {
251
+ return this._elements;
252
+ }
253
+ /**
254
+ * Get the number of stored elements.
255
+ * @remarks Time O(1), Space O(1)
256
+ * @returns Current size.
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
+
285
+
286
+ * @example
287
+ * // Get number of elements
288
+ * const stack = new Stack<number>([1, 2, 3]);
289
+ * console.log(stack.size); // 3;
290
+ */
291
+ get size() {
292
+ return this.elements.length;
293
+ }
294
+ /**
295
+ * Create a stack from an array of elements.
296
+ * @remarks Time O(N), Space O(N)
297
+ * @template E
298
+ * @template R
299
+ * @param this - The constructor (subclass) to instantiate.
300
+ * @param elements - Array of elements to push in order.
301
+ * @param [options] - Options forwarded to the constructor.
302
+ * @returns A new Stack populated from the array.
303
+ */
304
+ static fromArray(elements, options) {
305
+ return new this(elements, options);
306
+ }
307
+ /**
308
+ * Check whether the stack is empty.
309
+ * @remarks Time O(1), Space O(1)
310
+ * @returns True if size is 0.
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
+
341
+
342
+ * @example
343
+ * // Check if stack has elements
344
+ * const stack = new Stack<number>();
345
+ * console.log(stack.isEmpty()); // true;
346
+ * stack.push(1);
347
+ * console.log(stack.isEmpty()); // false;
348
+ */
349
+ isEmpty() {
350
+ return this.elements.length === 0;
351
+ }
352
+ /**
353
+ * Get the top element without removing it.
354
+ * @remarks Time O(1), Space O(1)
355
+ * @returns Top element or undefined.
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
+
386
+
387
+ * @example
388
+ * // View the top element without removing it
389
+ * const stack = new Stack<string>(['a', 'b', 'c']);
390
+ * console.log(stack.peek()); // 'c';
391
+ * console.log(stack.size); // 3;
392
+ */
393
+ peek() {
394
+ return this.isEmpty() ? void 0 : this.elements[this.elements.length - 1];
395
+ }
396
+ /**
397
+ * Push one element onto the top.
398
+ * @remarks Time O(1), Space O(1)
399
+ * @param element - Element to push.
400
+ * @returns True when pushed.
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
+
431
+
432
+ * @example
433
+ * // basic Stack creation and push operation
434
+ * // Create a simple Stack with initial values
435
+ * const stack = new Stack([1, 2, 3, 4, 5]);
436
+ *
437
+ * // Verify the stack maintains insertion order (LIFO will be shown in pop)
438
+ * console.log([...stack]); // [1, 2, 3, 4, 5];
439
+ *
440
+ * // Check length
441
+ * console.log(stack.size); // 5;
442
+ *
443
+ * // Push a new element to the top
444
+ * stack.push(6);
445
+ * console.log(stack.size); // 6;
446
+ */
447
+ push(element) {
448
+ this.elements.push(element);
449
+ return true;
450
+ }
451
+ /**
452
+ * Pop and return the top element.
453
+ * @remarks Time O(1), Space O(1)
454
+ * @returns Removed element or undefined.
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
+
485
+
486
+ * @example
487
+ * // Stack pop operation (LIFO - Last In First Out)
488
+ * const stack = new Stack<number>([10, 20, 30, 40, 50]);
489
+ *
490
+ * // Peek at the top element without removing
491
+ * const top = stack.peek();
492
+ * console.log(top); // 50;
493
+ *
494
+ * // Pop removes from the top (LIFO order)
495
+ * const popped = stack.pop();
496
+ * console.log(popped); // 50;
497
+ *
498
+ * // Next pop gets the previous element
499
+ * const next = stack.pop();
500
+ * console.log(next); // 40;
501
+ *
502
+ * // Verify length decreased
503
+ * console.log(stack.size); // 3;
504
+ */
505
+ pop() {
506
+ return this.isEmpty() ? void 0 : this.elements.pop();
507
+ }
508
+ /**
509
+ * Push many elements from an iterable.
510
+ * @remarks Time O(N), Space O(1)
511
+ * @param elements - Iterable of elements (or raw records if toElementFn is set).
512
+ * @returns Array of per-element success flags.
513
+ */
514
+ pushMany(elements) {
515
+ const ans = [];
516
+ for (const el of elements) {
517
+ if (this.toElementFn) ans.push(this.push(this.toElementFn(el)));
518
+ else ans.push(this.push(el));
519
+ }
520
+ return ans;
521
+ }
522
+ /**
523
+ * Delete the first occurrence of a specific element.
524
+ * @remarks Time O(N), Space O(1)
525
+ * @param element - Element to remove (using the configured equality).
526
+ * @returns True if an element was removed.
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
+
554
+
555
+ * @example
556
+ * // Remove element
557
+ * const stack = new Stack<number>([1, 2, 3]);
558
+ * stack.delete(2);
559
+ * console.log(stack.toArray()); // [1, 3];
560
+ */
561
+ delete(element) {
562
+ const idx = this._indexOfByEquals(element);
563
+ return this.deleteAt(idx);
564
+ }
565
+ /**
566
+ * Delete the element at an index.
567
+ * @remarks Time O(N), Space O(1)
568
+ * @param index - Zero-based index from the bottom.
569
+ * @returns True if removed.
570
+ */
571
+ deleteAt(index) {
572
+ if (index < 0 || index >= this.elements.length) return false;
573
+ const spliced = this.elements.splice(index, 1);
574
+ return spliced.length === 1;
575
+ }
576
+ /**
577
+ * Delete the first element that satisfies a predicate.
578
+ * @remarks Time O(N), Space O(1)
579
+ * @param predicate - Function (value, index, stack) → boolean to decide deletion.
580
+ * @returns True if a match was removed.
581
+ */
582
+ deleteWhere(predicate) {
583
+ for (let i = 0; i < this.elements.length; i++) {
584
+ if (predicate(this.elements[i], i, this)) {
585
+ this.elements.splice(i, 1);
586
+ return true;
587
+ }
588
+ }
589
+ return false;
590
+ }
591
+ /**
592
+ * Remove all elements and reset storage.
593
+ * @remarks Time O(1), Space O(1)
594
+ * @returns void
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
+
623
+
624
+ * @example
625
+ * // Remove all elements
626
+ * const stack = new Stack<number>([1, 2, 3]);
627
+ * stack.clear();
628
+ * console.log(stack.isEmpty()); // true;
629
+ */
630
+ clear() {
631
+ this._elements = [];
632
+ }
633
+ /**
634
+ * Deep clone this stack.
635
+ * @remarks Time O(N), Space O(N)
636
+ * @returns A new stack with the same content.
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
+
665
+
666
+ * @example
667
+ * // Create independent copy
668
+ * const stack = new Stack<number>([1, 2, 3]);
669
+ * const copy = stack.clone();
670
+ * copy.pop();
671
+ * console.log(stack.size); // 3;
672
+ * console.log(copy.size); // 2;
673
+ */
674
+ clone() {
675
+ const out = this._createInstance({ toElementFn: this.toElementFn });
676
+ for (const v of this) out.push(v);
677
+ return out;
678
+ }
679
+ /**
680
+ * Filter elements into a new stack of the same class.
681
+ * @remarks Time O(N), Space O(N)
682
+ * @param predicate - Predicate (value, index, stack) → boolean to keep value.
683
+ * @param [thisArg] - Value for `this` inside the predicate.
684
+ * @returns A new stack with kept values.
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
+
713
+
714
+ * @example
715
+ * // Filter elements
716
+ * const stack = new Stack<number>([1, 2, 3, 4, 5]);
717
+ * const evens = stack.filter(x => x % 2 === 0);
718
+ * console.log(evens.toArray()); // [2, 4];
719
+ */
720
+ filter(predicate, thisArg) {
721
+ const out = this._createInstance({ toElementFn: this.toElementFn });
722
+ let index = 0;
723
+ for (const v of this) {
724
+ if (predicate.call(thisArg, v, index, this)) out.push(v);
725
+ index++;
726
+ }
727
+ return out;
728
+ }
729
+ /**
730
+ * Map values into a new stack of the same element type.
731
+ * @remarks Time O(N), Space O(N)
732
+ * @param callback - Mapping function (value, index, stack) → newValue.
733
+ * @param [thisArg] - Value for `this` inside the callback.
734
+ * @returns A new stack with mapped values.
735
+ */
736
+ mapSame(callback, thisArg) {
737
+ const out = this._createInstance({ toElementFn: this.toElementFn });
738
+ let index = 0;
739
+ for (const v of this) {
740
+ const mv = thisArg === void 0 ? callback(v, index++, this) : callback.call(thisArg, v, index++, this);
741
+ out.push(mv);
742
+ }
743
+ return out;
744
+ }
745
+ /**
746
+ * Map values into a new stack (possibly different element type).
747
+ * @remarks Time O(N), Space O(N)
748
+ * @template EM
749
+ * @template RM
750
+ * @param callback - Mapping function (value, index, stack) → newElement.
751
+ * @param [options] - Options for the output stack (e.g., toElementFn).
752
+ * @param [thisArg] - Value for `this` inside the callback.
753
+ * @returns A new Stack with mapped elements.
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
+
781
+
782
+ * @example
783
+ * // Transform elements
784
+ * const stack = new Stack<number>([1, 2, 3]);
785
+ * const doubled = stack.map(x => x * 2);
786
+ * console.log(doubled.toArray()); // [2, 4, 6];
787
+ */
788
+ map(callback, options, thisArg) {
789
+ const out = this._createLike([], { ...options ?? {} });
790
+ let index = 0;
791
+ for (const v of this) {
792
+ out.push(thisArg === void 0 ? callback(v, index, this) : callback.call(thisArg, v, index, this));
793
+ index++;
794
+ }
795
+ return out;
796
+ }
797
+ /**
798
+ * Set the equality comparator used by delete/search operations.
799
+ * @remarks Time O(1), Space O(1)
800
+ * @param equals - Equality predicate (a, b) → boolean.
801
+ * @returns This stack.
802
+ */
803
+ setEquality(equals) {
804
+ this._equals = equals;
805
+ return this;
806
+ }
807
+ /**
808
+ * (Protected) Find the index of a target element using the equality function.
809
+ * @remarks Time O(N), Space O(1)
810
+ * @param target - Element to search for.
811
+ * @returns Index or -1 if not found.
812
+ */
813
+ _indexOfByEquals(target) {
814
+ for (let i = 0; i < this.elements.length; i++) if (this._equals(this.elements[i], target)) return i;
815
+ return -1;
816
+ }
817
+ /**
818
+ * (Protected) Create an empty instance of the same concrete class.
819
+ * @remarks Time O(1), Space O(1)
820
+ * @param [options] - Options forwarded to the constructor.
821
+ * @returns An empty like-kind stack instance.
822
+ */
823
+ _createInstance(options) {
824
+ const Ctor = this.constructor;
825
+ return new Ctor([], options);
826
+ }
827
+ /**
828
+ * (Protected) Create a like-kind stack and seed it from an iterable.
829
+ * @remarks Time O(N), Space O(N)
830
+ * @template T
831
+ * @template RR
832
+ * @param [elements] - Iterable used to seed the new stack.
833
+ * @param [options] - Options forwarded to the constructor.
834
+ * @returns A like-kind Stack instance.
835
+ */
836
+ _createLike(elements = [], options) {
837
+ const Ctor = this.constructor;
838
+ return new Ctor(elements, options);
839
+ }
840
+ /**
841
+ * (Protected) Iterate elements from bottom to top.
842
+ * @remarks Time O(N), Space O(1)
843
+ * @returns Iterator of elements.
844
+ */
845
+ *_getIterator() {
846
+ for (let i = 0; i < this.elements.length; i++) yield this.elements[i];
847
+ }
848
+ };
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