data-structure-typed 2.5.2 → 2.6.0

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 (162) hide show
  1. package/.husky/pre-commit +3 -0
  2. package/CHANGELOG.md +3 -1
  3. package/MIGRATION.md +217 -0
  4. package/README.md +80 -8
  5. package/README_CN.md +569 -143
  6. package/SPECIFICATION.md +44 -14
  7. package/SPECIFICATION.zh-CN.md +44 -14
  8. package/dist/cjs/binary-tree.cjs +5841 -1678
  9. package/dist/cjs/graph.cjs +422 -14
  10. package/dist/cjs/hash.cjs +95 -7
  11. package/dist/cjs/heap.cjs +174 -16
  12. package/dist/cjs/index.cjs +7751 -2449
  13. package/dist/cjs/linked-list.cjs +443 -2
  14. package/dist/cjs/matrix.cjs +56 -0
  15. package/dist/cjs/priority-queue.cjs +172 -14
  16. package/dist/cjs/queue.cjs +435 -0
  17. package/dist/cjs/stack.cjs +103 -4
  18. package/dist/cjs/trie.cjs +106 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +5933 -1772
  20. package/dist/cjs-legacy/graph.cjs +422 -14
  21. package/dist/cjs-legacy/hash.cjs +95 -7
  22. package/dist/cjs-legacy/heap.cjs +174 -16
  23. package/dist/cjs-legacy/index.cjs +8154 -2854
  24. package/dist/cjs-legacy/linked-list.cjs +443 -2
  25. package/dist/cjs-legacy/matrix.cjs +56 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +172 -14
  27. package/dist/cjs-legacy/queue.cjs +435 -0
  28. package/dist/cjs-legacy/stack.cjs +103 -4
  29. package/dist/cjs-legacy/trie.cjs +106 -0
  30. package/dist/esm/binary-tree.mjs +5841 -1678
  31. package/dist/esm/graph.mjs +422 -14
  32. package/dist/esm/hash.mjs +95 -7
  33. package/dist/esm/heap.mjs +174 -16
  34. package/dist/esm/index.mjs +7751 -2449
  35. package/dist/esm/linked-list.mjs +443 -2
  36. package/dist/esm/matrix.mjs +56 -0
  37. package/dist/esm/priority-queue.mjs +172 -14
  38. package/dist/esm/queue.mjs +435 -0
  39. package/dist/esm/stack.mjs +103 -4
  40. package/dist/esm/trie.mjs +106 -0
  41. package/dist/esm-legacy/binary-tree.mjs +5933 -1772
  42. package/dist/esm-legacy/graph.mjs +422 -14
  43. package/dist/esm-legacy/hash.mjs +95 -7
  44. package/dist/esm-legacy/heap.mjs +174 -16
  45. package/dist/esm-legacy/index.mjs +8154 -2854
  46. package/dist/esm-legacy/linked-list.mjs +443 -2
  47. package/dist/esm-legacy/matrix.mjs +56 -0
  48. package/dist/esm-legacy/priority-queue.mjs +172 -14
  49. package/dist/esm-legacy/queue.mjs +435 -0
  50. package/dist/esm-legacy/stack.mjs +103 -4
  51. package/dist/esm-legacy/trie.mjs +106 -0
  52. package/dist/types/data-structures/base/iterable-element-base.d.ts +17 -0
  53. package/dist/types/data-structures/base/linear-base.d.ts +6 -0
  54. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +86 -2
  55. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +98 -0
  56. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +191 -15
  57. package/dist/types/data-structures/binary-tree/bst.d.ts +171 -3
  58. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +136 -8
  59. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +42 -0
  60. package/dist/types/data-structures/binary-tree/tree-map.d.ts +1061 -167
  61. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1232 -355
  62. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +916 -194
  63. package/dist/types/data-structures/binary-tree/tree-set.d.ts +1078 -141
  64. package/dist/types/data-structures/graph/directed-graph.d.ts +70 -0
  65. package/dist/types/data-structures/graph/undirected-graph.d.ts +63 -0
  66. package/dist/types/data-structures/hash/hash-map.d.ts +84 -6
  67. package/dist/types/data-structures/heap/heap.d.ts +140 -12
  68. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +150 -2
  69. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +106 -1
  70. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +126 -0
  71. package/dist/types/data-structures/matrix/matrix.d.ts +56 -0
  72. package/dist/types/data-structures/queue/deque.d.ts +171 -0
  73. package/dist/types/data-structures/queue/queue.d.ts +97 -0
  74. package/dist/types/data-structures/stack/stack.d.ts +72 -2
  75. package/dist/types/data-structures/trie/trie.d.ts +84 -0
  76. package/dist/types/interfaces/binary-tree.d.ts +2 -3
  77. package/dist/umd/data-structure-typed.js +7784 -2484
  78. package/dist/umd/data-structure-typed.min.js +4 -4
  79. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +188 -200
  80. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +11 -11
  81. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +62 -62
  82. package/docs-site-docusaurus/docs/api/classes/BST.md +183 -195
  83. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +13 -13
  84. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +15 -15
  85. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +143 -155
  86. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
  87. package/docs-site-docusaurus/docs/api/classes/Deque.md +99 -85
  88. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +73 -73
  89. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +100 -70
  90. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +8 -8
  91. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +12 -12
  92. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
  93. package/docs-site-docusaurus/docs/api/classes/HashMap.md +38 -38
  94. package/docs-site-docusaurus/docs/api/classes/Heap.md +96 -85
  95. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +25 -25
  96. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +23 -23
  97. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +48 -48
  98. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +52 -52
  99. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +46 -42
  100. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +6 -6
  101. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +74 -74
  102. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +73 -73
  103. package/docs-site-docusaurus/docs/api/classes/Matrix.md +31 -31
  104. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +104 -89
  105. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +104 -89
  106. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +104 -89
  107. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +104 -89
  108. package/docs-site-docusaurus/docs/api/classes/Navigator.md +5 -5
  109. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +103 -88
  110. package/docs-site-docusaurus/docs/api/classes/Queue.md +111 -59
  111. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +200 -212
  112. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -10
  113. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +75 -75
  114. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +6 -6
  115. package/docs-site-docusaurus/docs/api/classes/SkipList.md +37 -37
  116. package/docs-site-docusaurus/docs/api/classes/Stack.md +42 -42
  117. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +107 -36
  118. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +43 -43
  119. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +106 -35
  120. package/docs-site-docusaurus/docs/api/classes/Trie.md +43 -43
  121. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
  122. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +72 -72
  123. package/docs-site-docusaurus/docs/guide/architecture.md +75 -7
  124. package/docs-site-docusaurus/docs/guide/concepts.md +53 -34
  125. package/docs-site-docusaurus/docs/guide/faq.md +53 -0
  126. package/docs-site-docusaurus/docs/guide/guides.md +8 -9
  127. package/docs-site-docusaurus/docs/guide/integrations.md +74 -177
  128. package/docs-site-docusaurus/docs/guide/overview.md +131 -17
  129. package/docs-site-docusaurus/src/pages/index.tsx +4 -0
  130. package/docs-site-docusaurus/typedoc.json +1 -0
  131. package/jest.integration.config.js +1 -2
  132. package/package.json +10 -7
  133. package/src/data-structures/base/iterable-element-base.ts +32 -0
  134. package/src/data-structures/base/linear-base.ts +11 -0
  135. package/src/data-structures/binary-tree/avl-tree.ts +88 -5
  136. package/src/data-structures/binary-tree/binary-indexed-tree.ts +98 -0
  137. package/src/data-structures/binary-tree/binary-tree.ts +242 -81
  138. package/src/data-structures/binary-tree/bst.ts +173 -7
  139. package/src/data-structures/binary-tree/red-black-tree.ts +139 -15
  140. package/src/data-structures/binary-tree/segment-tree.ts +42 -0
  141. package/src/data-structures/binary-tree/tree-map.ts +948 -36
  142. package/src/data-structures/binary-tree/tree-multi-map.ts +893 -13
  143. package/src/data-structures/binary-tree/tree-multi-set.ts +761 -33
  144. package/src/data-structures/binary-tree/tree-set.ts +1260 -251
  145. package/src/data-structures/graph/directed-graph.ts +71 -1
  146. package/src/data-structures/graph/undirected-graph.ts +64 -1
  147. package/src/data-structures/hash/hash-map.ts +100 -12
  148. package/src/data-structures/heap/heap.ts +149 -19
  149. package/src/data-structures/linked-list/doubly-linked-list.ts +178 -2
  150. package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
  151. package/src/data-structures/linked-list/skip-linked-list.ts +126 -0
  152. package/src/data-structures/matrix/matrix.ts +56 -0
  153. package/src/data-structures/queue/deque.ts +187 -0
  154. package/src/data-structures/queue/queue.ts +109 -0
  155. package/src/data-structures/stack/stack.ts +75 -5
  156. package/src/data-structures/trie/trie.ts +84 -0
  157. package/src/interfaces/binary-tree.ts +1 -9
  158. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +0 -12984
  159. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +0 -3
  160. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +0 -4505
  161. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +0 -9731
  162. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +0 -347
@@ -158,6 +158,35 @@ var _IterableElementBase = class _IterableElementBase {
158
158
  for (const ele of this) if (ele === element) return true;
159
159
  return false;
160
160
  }
161
+ /**
162
+ * Check whether a value exists (Array-compatible alias for `has`).
163
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
164
+ * @param element - Element to search for (uses `===`).
165
+ * @returns `true` if found.
166
+ */
167
+ includes(element) {
168
+ return this.has(element);
169
+ }
170
+ /**
171
+ * Return an iterator of `[index, value]` pairs (Array-compatible).
172
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
173
+ */
174
+ *entries() {
175
+ let index = 0;
176
+ for (const value of this) {
177
+ yield [index++, value];
178
+ }
179
+ }
180
+ /**
181
+ * Return an iterator of numeric indices (Array-compatible).
182
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
183
+ */
184
+ *keys() {
185
+ let index = 0;
186
+ for (const _ of this) {
187
+ yield index++;
188
+ }
189
+ }
161
190
  /**
162
191
  * Reduces all elements to a single accumulated value.
163
192
  *
@@ -466,6 +495,16 @@ var _LinearBase = class _LinearBase extends IterableElementBase {
466
495
  }
467
496
  return this;
468
497
  }
498
+ /**
499
+ * Return a new instance of the same type with elements in reverse order (non-mutating).
500
+ * @remarks Provided for familiarity when migrating from Array (ES2023 `toReversed`). Time O(n), Space O(n).
501
+ * @returns A new reversed instance.
502
+ */
503
+ toReversed() {
504
+ const cloned = this.clone();
505
+ cloned.reverse();
506
+ return cloned;
507
+ }
469
508
  };
470
509
  __name(_LinearBase, "LinearBase");
471
510
  var LinearBase = _LinearBase;
@@ -756,6 +795,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
756
795
 
757
796
 
758
797
 
798
+
799
+
800
+
801
+
802
+
803
+
804
+
759
805
 
760
806
 
761
807
 
@@ -823,6 +869,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
823
869
 
824
870
 
825
871
 
872
+
873
+
874
+
875
+
876
+
877
+
878
+
826
879
 
827
880
 
828
881
 
@@ -896,6 +949,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
896
949
 
897
950
 
898
951
 
952
+
953
+
954
+
955
+
956
+
957
+
958
+
899
959
 
900
960
 
901
961
 
@@ -950,6 +1010,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
950
1010
 
951
1011
 
952
1012
 
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
953
1020
 
954
1021
 
955
1022
 
@@ -1065,6 +1132,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1065
1132
 
1066
1133
 
1067
1134
 
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1068
1142
 
1069
1143
 
1070
1144
 
@@ -1124,6 +1198,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1124
1198
 
1125
1199
 
1126
1200
 
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1127
1208
 
1128
1209
 
1129
1210
 
@@ -1172,6 +1253,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1172
1253
 
1173
1254
 
1174
1255
 
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1175
1263
 
1176
1264
 
1177
1265
 
@@ -1226,6 +1314,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1226
1314
 
1227
1315
 
1228
1316
 
1317
+
1318
+
1319
+
1320
+
1321
+
1322
+
1323
+
1229
1324
 
1230
1325
 
1231
1326
 
@@ -1285,6 +1380,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1285
1380
 
1286
1381
 
1287
1382
 
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1288
1390
 
1289
1391
 
1290
1392
 
@@ -1352,6 +1454,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1352
1454
 
1353
1455
 
1354
1456
 
1457
+
1458
+
1459
+
1460
+
1461
+
1462
+
1463
+
1355
1464
 
1356
1465
 
1357
1466
 
@@ -1396,6 +1505,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1396
1505
 
1397
1506
 
1398
1507
 
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+
1514
+
1399
1515
 
1400
1516
 
1401
1517
 
@@ -1446,6 +1562,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1446
1562
 
1447
1563
 
1448
1564
 
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1449
1572
 
1450
1573
 
1451
1574
 
@@ -1662,6 +1785,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1662
1785
 
1663
1786
 
1664
1787
 
1788
+
1789
+
1790
+
1791
+
1792
+
1793
+
1794
+
1665
1795
 
1666
1796
 
1667
1797
 
@@ -1716,6 +1846,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1716
1846
 
1717
1847
 
1718
1848
 
1849
+
1850
+
1851
+
1852
+
1853
+
1854
+
1855
+
1719
1856
 
1720
1857
 
1721
1858
 
@@ -1798,6 +1935,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1798
1935
 
1799
1936
 
1800
1937
 
1938
+
1939
+
1940
+
1941
+
1942
+
1943
+
1944
+
1801
1945
 
1802
1946
 
1803
1947
 
@@ -2032,6 +2176,13 @@ var _Queue = class _Queue extends LinearBase {
2032
2176
 
2033
2177
 
2034
2178
 
2179
+
2180
+
2181
+
2182
+
2183
+
2184
+
2185
+
2035
2186
 
2036
2187
 
2037
2188
 
@@ -2082,6 +2233,13 @@ var _Queue = class _Queue extends LinearBase {
2082
2233
 
2083
2234
 
2084
2235
 
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+
2242
+
2085
2243
 
2086
2244
 
2087
2245
 
@@ -2099,6 +2257,14 @@ var _Queue = class _Queue extends LinearBase {
2099
2257
  get first() {
2100
2258
  return this.length > 0 ? this.elements[this._offset] : void 0;
2101
2259
  }
2260
+ /**
2261
+ * Peek at the front element without removing it (alias for `first`).
2262
+ * @remarks Time O(1), Space O(1)
2263
+ * @returns Front element or undefined.
2264
+ */
2265
+ peek() {
2266
+ return this.first;
2267
+ }
2102
2268
  /**
2103
2269
  * Get the last element (back) without removing it.
2104
2270
  * @remarks Time O(1), Space O(1)
@@ -2148,6 +2314,13 @@ var _Queue = class _Queue extends LinearBase {
2148
2314
 
2149
2315
 
2150
2316
 
2317
+
2318
+
2319
+
2320
+
2321
+
2322
+
2323
+
2151
2324
 
2152
2325
 
2153
2326
 
@@ -2210,6 +2383,13 @@ var _Queue = class _Queue extends LinearBase {
2210
2383
 
2211
2384
 
2212
2385
 
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2213
2393
 
2214
2394
 
2215
2395
 
@@ -2279,6 +2459,13 @@ var _Queue = class _Queue extends LinearBase {
2279
2459
 
2280
2460
 
2281
2461
 
2462
+
2463
+
2464
+
2465
+
2466
+
2467
+
2468
+
2282
2469
 
2283
2470
 
2284
2471
 
@@ -2338,6 +2525,13 @@ var _Queue = class _Queue extends LinearBase {
2338
2525
 
2339
2526
 
2340
2527
 
2528
+
2529
+
2530
+
2531
+
2532
+
2533
+
2534
+
2341
2535
 
2342
2536
 
2343
2537
 
@@ -2390,6 +2584,13 @@ var _Queue = class _Queue extends LinearBase {
2390
2584
 
2391
2585
 
2392
2586
 
2587
+
2588
+
2589
+
2590
+
2591
+
2592
+
2593
+
2393
2594
 
2394
2595
 
2395
2596
 
@@ -2444,6 +2645,21 @@ var _Queue = class _Queue extends LinearBase {
2444
2645
  this._elements[this._offset + index] = newElement;
2445
2646
  return true;
2446
2647
  }
2648
+ /**
2649
+ * Delete the first element that satisfies a predicate.
2650
+ * @remarks Time O(N), Space O(N)
2651
+ * @param predicate - Function (value, index, queue) → boolean to decide deletion.
2652
+ * @returns True if a match was removed.
2653
+ */
2654
+ deleteWhere(predicate) {
2655
+ for (let i = 0; i < this.length; i++) {
2656
+ if (predicate(this._elements[this._offset + i], i, this)) {
2657
+ this.deleteAt(i);
2658
+ return true;
2659
+ }
2660
+ }
2661
+ return false;
2662
+ }
2447
2663
  /**
2448
2664
  * Reverse the queue in-place by compacting then reversing.
2449
2665
  * @remarks Time O(N), Space O(N)
@@ -2483,6 +2699,13 @@ var _Queue = class _Queue extends LinearBase {
2483
2699
 
2484
2700
 
2485
2701
 
2702
+
2703
+
2704
+
2705
+
2706
+
2707
+
2708
+
2486
2709
 
2487
2710
 
2488
2711
 
@@ -2529,6 +2752,13 @@ var _Queue = class _Queue extends LinearBase {
2529
2752
 
2530
2753
 
2531
2754
 
2755
+
2756
+
2757
+
2758
+
2759
+
2760
+
2761
+
2532
2762
 
2533
2763
 
2534
2764
 
@@ -2598,6 +2828,13 @@ var _Queue = class _Queue extends LinearBase {
2598
2828
 
2599
2829
 
2600
2830
 
2831
+
2832
+
2833
+
2834
+
2835
+
2836
+
2837
+
2601
2838
 
2602
2839
 
2603
2840
 
@@ -2651,6 +2888,13 @@ var _Queue = class _Queue extends LinearBase {
2651
2888
 
2652
2889
 
2653
2890
 
2891
+
2892
+
2893
+
2894
+
2895
+
2896
+
2897
+
2654
2898
 
2655
2899
 
2656
2900
 
@@ -2708,6 +2952,13 @@ var _Queue = class _Queue extends LinearBase {
2708
2952
 
2709
2953
 
2710
2954
 
2955
+
2956
+
2957
+
2958
+
2959
+
2960
+
2961
+
2711
2962
 
2712
2963
 
2713
2964
 
@@ -2992,6 +3243,37 @@ var _Deque = class _Deque extends LinearBase {
2992
3243
 
2993
3244
 
2994
3245
 
3246
+
3247
+
3248
+
3249
+
3250
+
3251
+ * @example
3252
+ * // Deque peek at both ends
3253
+ * const deque = new Deque<number>([10, 20, 30, 40, 50]);
3254
+ *
3255
+ * // Get first element without removing
3256
+ * const first = deque.at(0);
3257
+ * console.log(first); // 10;
3258
+ *
3259
+ * // Get last element without removing
3260
+ * const last = deque.at(deque.length - 1);
3261
+ * console.log(last); // 50;
3262
+ *
3263
+ * // Length unchanged
3264
+ * console.log(deque.length); // 5;
3265
+ */
3266
+ /**
3267
+ * Peek at the front element without removing it (alias for `first`).
3268
+ * @remarks Time O(1), Space O(1)
3269
+ * @returns Front element or undefined.
3270
+ */
3271
+ peek() {
3272
+ return this.first;
3273
+ }
3274
+ /**
3275
+ * Deque peek at both ends
3276
+
2995
3277
 
2996
3278
 
2997
3279
  * @example
@@ -3044,6 +3326,13 @@ var _Deque = class _Deque extends LinearBase {
3044
3326
 
3045
3327
 
3046
3328
 
3329
+
3330
+
3331
+
3332
+
3333
+
3334
+
3335
+
3047
3336
 
3048
3337
 
3049
3338
 
@@ -3107,6 +3396,13 @@ var _Deque = class _Deque extends LinearBase {
3107
3396
 
3108
3397
 
3109
3398
 
3399
+
3400
+
3401
+
3402
+
3403
+
3404
+
3405
+
3110
3406
 
3111
3407
 
3112
3408
 
@@ -3183,6 +3479,13 @@ var _Deque = class _Deque extends LinearBase {
3183
3479
 
3184
3480
 
3185
3481
 
3482
+
3483
+
3484
+
3485
+
3486
+
3487
+
3488
+
3186
3489
 
3187
3490
 
3188
3491
 
@@ -3246,6 +3549,13 @@ var _Deque = class _Deque extends LinearBase {
3246
3549
 
3247
3550
 
3248
3551
 
3552
+
3553
+
3554
+
3555
+
3556
+
3557
+
3558
+
3249
3559
 
3250
3560
 
3251
3561
 
@@ -3310,6 +3620,13 @@ var _Deque = class _Deque extends LinearBase {
3310
3620
 
3311
3621
 
3312
3622
 
3623
+
3624
+
3625
+
3626
+
3627
+
3628
+
3629
+
3313
3630
 
3314
3631
 
3315
3632
 
@@ -3415,6 +3732,13 @@ var _Deque = class _Deque extends LinearBase {
3415
3732
 
3416
3733
 
3417
3734
 
3735
+
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+
3418
3742
 
3419
3743
 
3420
3744
 
@@ -3460,6 +3784,13 @@ var _Deque = class _Deque extends LinearBase {
3460
3784
 
3461
3785
 
3462
3786
 
3787
+
3788
+
3789
+
3790
+
3791
+
3792
+
3793
+
3463
3794
 
3464
3795
 
3465
3796
 
@@ -3509,6 +3840,13 @@ var _Deque = class _Deque extends LinearBase {
3509
3840
 
3510
3841
 
3511
3842
 
3843
+
3844
+
3845
+
3846
+
3847
+
3848
+
3849
+
3512
3850
 
3513
3851
 
3514
3852
 
@@ -3709,6 +4047,13 @@ var _Deque = class _Deque extends LinearBase {
3709
4047
 
3710
4048
 
3711
4049
 
4050
+
4051
+
4052
+
4053
+
4054
+
4055
+
4056
+
3712
4057
 
3713
4058
 
3714
4059
 
@@ -3803,6 +4148,68 @@ var _Deque = class _Deque extends LinearBase {
3803
4148
 
3804
4149
 
3805
4150
 
4151
+
4152
+
4153
+
4154
+
4155
+
4156
+ * @example
4157
+ * // Deque for...of iteration and reverse
4158
+ * const deque = new Deque<string>(['A', 'B', 'C', 'D']);
4159
+ *
4160
+ * // Iterate forward
4161
+ * const forward: string[] = [];
4162
+ * for (const item of deque) {
4163
+ * forward.push(item);
4164
+ * }
4165
+ * console.log(forward); // ['A', 'B', 'C', 'D'];
4166
+ *
4167
+ * // Reverse the deque
4168
+ * deque.reverse();
4169
+ * const backward: string[] = [];
4170
+ * for (const item of deque) {
4171
+ * backward.push(item);
4172
+ * }
4173
+ * console.log(backward); // ['D', 'C', 'B', 'A'];
4174
+ */
4175
+ /**
4176
+ * Find the last value matching a predicate (scans back-to-front).
4177
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
4178
+ * @param predicate - Function called with (value, index, deque).
4179
+ * @returns Matching value or undefined.
4180
+ * @example
4181
+ * // Find last matching value
4182
+ * const d = new Deque([1, 2, 3, 4, 5]);
4183
+ * console.log(d.findLast(v => v > 2)); // 5;
4184
+ * console.log(d.findLast(v => v % 2 === 0)); // 4;
4185
+ */
4186
+ findLast(predicate) {
4187
+ for (let i = this.length - 1; i >= 0; i--) {
4188
+ const val = this.at(i);
4189
+ if (predicate(val, i, this)) return val;
4190
+ }
4191
+ return void 0;
4192
+ }
4193
+ /**
4194
+ * Find the index of the last value matching a predicate (scans back-to-front).
4195
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
4196
+ * @param predicate - Function called with (value, index, deque).
4197
+ * @returns Matching index, or -1 if not found.
4198
+ * @example
4199
+ * // Find last matching index
4200
+ * const d = new Deque([10, 20, 30, 20, 10]);
4201
+ * console.log(d.findLastIndex(v => v === 20)); // 3;
4202
+ * console.log(d.findLastIndex(v => v === 10)); // 4;
4203
+ */
4204
+ findLastIndex(predicate) {
4205
+ for (let i = this.length - 1; i >= 0; i--) {
4206
+ if (predicate(this.at(i), i, this)) return i;
4207
+ }
4208
+ return -1;
4209
+ }
4210
+ /**
4211
+ * Deque for...of iteration and reverse
4212
+
3806
4213
 
3807
4214
  * @example
3808
4215
  * // Deque for...of iteration and reverse
@@ -3908,6 +4315,13 @@ var _Deque = class _Deque extends LinearBase {
3908
4315
 
3909
4316
 
3910
4317
 
4318
+
4319
+
4320
+
4321
+
4322
+
4323
+
4324
+
3911
4325
 
3912
4326
 
3913
4327
 
@@ -3979,6 +4393,13 @@ var _Deque = class _Deque extends LinearBase {
3979
4393
 
3980
4394
 
3981
4395
 
4396
+
4397
+
4398
+
4399
+
4400
+
4401
+
4402
+
3982
4403
 
3983
4404
 
3984
4405
 
@@ -4033,6 +4454,13 @@ var _Deque = class _Deque extends LinearBase {
4033
4454
 
4034
4455
 
4035
4456
 
4457
+
4458
+
4459
+
4460
+
4461
+
4462
+
4463
+
4036
4464
 
4037
4465
 
4038
4466
 
@@ -4107,6 +4535,13 @@ var _Deque = class _Deque extends LinearBase {
4107
4535
 
4108
4536
 
4109
4537
 
4538
+
4539
+
4540
+
4541
+
4542
+
4543
+
4544
+
4110
4545
 
4111
4546
 
4112
4547