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
@@ -161,6 +161,35 @@ var IterableElementBase = class {
161
161
  for (const ele of this) if (ele === element) return true;
162
162
  return false;
163
163
  }
164
+ /**
165
+ * Check whether a value exists (Array-compatible alias for `has`).
166
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
167
+ * @param element - Element to search for (uses `===`).
168
+ * @returns `true` if found.
169
+ */
170
+ includes(element) {
171
+ return this.has(element);
172
+ }
173
+ /**
174
+ * Return an iterator of `[index, value]` pairs (Array-compatible).
175
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
176
+ */
177
+ *entries() {
178
+ let index = 0;
179
+ for (const value of this) {
180
+ yield [index++, value];
181
+ }
182
+ }
183
+ /**
184
+ * Return an iterator of numeric indices (Array-compatible).
185
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
186
+ */
187
+ *keys() {
188
+ let index = 0;
189
+ for (const _ of this) {
190
+ yield index++;
191
+ }
192
+ }
164
193
  /**
165
194
  * Reduces all elements to a single accumulated value.
166
195
  *
@@ -471,6 +500,16 @@ var LinearBase = class _LinearBase extends IterableElementBase {
471
500
  }
472
501
  return this;
473
502
  }
503
+ /**
504
+ * Return a new instance of the same type with elements in reverse order (non-mutating).
505
+ * @remarks Provided for familiarity when migrating from Array (ES2023 `toReversed`). Time O(n), Space O(n).
506
+ * @returns A new reversed instance.
507
+ */
508
+ toReversed() {
509
+ const cloned = this.clone();
510
+ cloned.reverse();
511
+ return cloned;
512
+ }
474
513
  };
475
514
  var LinearLinkedBase = class extends LinearBase {
476
515
  static {
@@ -762,6 +801,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
762
801
 
763
802
 
764
803
 
804
+
805
+
806
+
807
+
808
+
809
+
810
+
765
811
 
766
812
 
767
813
 
@@ -829,6 +875,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
829
875
 
830
876
 
831
877
 
878
+
879
+
880
+
881
+
882
+
883
+
884
+
832
885
 
833
886
 
834
887
 
@@ -901,6 +954,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
901
954
 
902
955
 
903
956
 
957
+
958
+
959
+
960
+
961
+
962
+
963
+
904
964
 
905
965
 
906
966
 
@@ -955,6 +1015,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
955
1015
 
956
1016
 
957
1017
 
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
958
1025
 
959
1026
 
960
1027
 
@@ -1070,6 +1137,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1070
1137
 
1071
1138
 
1072
1139
 
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1073
1147
 
1074
1148
 
1075
1149
 
@@ -1129,6 +1203,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1129
1203
 
1130
1204
 
1131
1205
 
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1132
1213
 
1133
1214
 
1134
1215
 
@@ -1177,6 +1258,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1177
1258
 
1178
1259
 
1179
1260
 
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1180
1268
 
1181
1269
 
1182
1270
 
@@ -1231,6 +1319,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1231
1319
 
1232
1320
 
1233
1321
 
1322
+
1323
+
1324
+
1325
+
1326
+
1327
+
1328
+
1234
1329
 
1235
1330
 
1236
1331
 
@@ -1290,6 +1385,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1290
1385
 
1291
1386
 
1292
1387
 
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+
1394
+
1293
1395
 
1294
1396
 
1295
1397
 
@@ -1357,6 +1459,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1357
1459
 
1358
1460
 
1359
1461
 
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1360
1469
 
1361
1470
 
1362
1471
 
@@ -1401,6 +1510,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1401
1510
 
1402
1511
 
1403
1512
 
1513
+
1514
+
1515
+
1516
+
1517
+
1518
+
1519
+
1404
1520
 
1405
1521
 
1406
1522
 
@@ -1451,6 +1567,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1451
1567
 
1452
1568
 
1453
1569
 
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1454
1577
 
1455
1578
 
1456
1579
 
@@ -1667,6 +1790,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1667
1790
 
1668
1791
 
1669
1792
 
1793
+
1794
+
1795
+
1796
+
1797
+
1798
+
1799
+
1670
1800
 
1671
1801
 
1672
1802
 
@@ -1721,6 +1851,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1721
1851
 
1722
1852
 
1723
1853
 
1854
+
1855
+
1856
+
1857
+
1858
+
1859
+
1860
+
1724
1861
 
1725
1862
 
1726
1863
 
@@ -1803,6 +1940,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1803
1940
 
1804
1941
 
1805
1942
 
1943
+
1944
+
1945
+
1946
+
1947
+
1948
+
1949
+
1806
1950
 
1807
1951
 
1808
1952
 
@@ -2038,6 +2182,13 @@ var Queue = class _Queue extends LinearBase {
2038
2182
 
2039
2183
 
2040
2184
 
2185
+
2186
+
2187
+
2188
+
2189
+
2190
+
2191
+
2041
2192
 
2042
2193
 
2043
2194
 
@@ -2088,6 +2239,13 @@ var Queue = class _Queue extends LinearBase {
2088
2239
 
2089
2240
 
2090
2241
 
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+
2248
+
2091
2249
 
2092
2250
 
2093
2251
 
@@ -2105,6 +2263,14 @@ var Queue = class _Queue extends LinearBase {
2105
2263
  get first() {
2106
2264
  return this.length > 0 ? this.elements[this._offset] : void 0;
2107
2265
  }
2266
+ /**
2267
+ * Peek at the front element without removing it (alias for `first`).
2268
+ * @remarks Time O(1), Space O(1)
2269
+ * @returns Front element or undefined.
2270
+ */
2271
+ peek() {
2272
+ return this.first;
2273
+ }
2108
2274
  /**
2109
2275
  * Get the last element (back) without removing it.
2110
2276
  * @remarks Time O(1), Space O(1)
@@ -2154,6 +2320,13 @@ var Queue = class _Queue extends LinearBase {
2154
2320
 
2155
2321
 
2156
2322
 
2323
+
2324
+
2325
+
2326
+
2327
+
2328
+
2329
+
2157
2330
 
2158
2331
 
2159
2332
 
@@ -2216,6 +2389,13 @@ var Queue = class _Queue extends LinearBase {
2216
2389
 
2217
2390
 
2218
2391
 
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+
2219
2399
 
2220
2400
 
2221
2401
 
@@ -2285,6 +2465,13 @@ var Queue = class _Queue extends LinearBase {
2285
2465
 
2286
2466
 
2287
2467
 
2468
+
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+
2288
2475
 
2289
2476
 
2290
2477
 
@@ -2344,6 +2531,13 @@ var Queue = class _Queue extends LinearBase {
2344
2531
 
2345
2532
 
2346
2533
 
2534
+
2535
+
2536
+
2537
+
2538
+
2539
+
2540
+
2347
2541
 
2348
2542
 
2349
2543
 
@@ -2396,6 +2590,13 @@ var Queue = class _Queue extends LinearBase {
2396
2590
 
2397
2591
 
2398
2592
 
2593
+
2594
+
2595
+
2596
+
2597
+
2598
+
2599
+
2399
2600
 
2400
2601
 
2401
2602
 
@@ -2450,6 +2651,21 @@ var Queue = class _Queue extends LinearBase {
2450
2651
  this._elements[this._offset + index] = newElement;
2451
2652
  return true;
2452
2653
  }
2654
+ /**
2655
+ * Delete the first element that satisfies a predicate.
2656
+ * @remarks Time O(N), Space O(N)
2657
+ * @param predicate - Function (value, index, queue) → boolean to decide deletion.
2658
+ * @returns True if a match was removed.
2659
+ */
2660
+ deleteWhere(predicate) {
2661
+ for (let i = 0; i < this.length; i++) {
2662
+ if (predicate(this._elements[this._offset + i], i, this)) {
2663
+ this.deleteAt(i);
2664
+ return true;
2665
+ }
2666
+ }
2667
+ return false;
2668
+ }
2453
2669
  /**
2454
2670
  * Reverse the queue in-place by compacting then reversing.
2455
2671
  * @remarks Time O(N), Space O(N)
@@ -2489,6 +2705,13 @@ var Queue = class _Queue extends LinearBase {
2489
2705
 
2490
2706
 
2491
2707
 
2708
+
2709
+
2710
+
2711
+
2712
+
2713
+
2714
+
2492
2715
 
2493
2716
 
2494
2717
 
@@ -2535,6 +2758,13 @@ var Queue = class _Queue extends LinearBase {
2535
2758
 
2536
2759
 
2537
2760
 
2761
+
2762
+
2763
+
2764
+
2765
+
2766
+
2767
+
2538
2768
 
2539
2769
 
2540
2770
 
@@ -2604,6 +2834,13 @@ var Queue = class _Queue extends LinearBase {
2604
2834
 
2605
2835
 
2606
2836
 
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2607
2844
 
2608
2845
 
2609
2846
 
@@ -2657,6 +2894,13 @@ var Queue = class _Queue extends LinearBase {
2657
2894
 
2658
2895
 
2659
2896
 
2897
+
2898
+
2899
+
2900
+
2901
+
2902
+
2903
+
2660
2904
 
2661
2905
 
2662
2906
 
@@ -2714,6 +2958,13 @@ var Queue = class _Queue extends LinearBase {
2714
2958
 
2715
2959
 
2716
2960
 
2961
+
2962
+
2963
+
2964
+
2965
+
2966
+
2967
+
2717
2968
 
2718
2969
 
2719
2970
 
@@ -2998,6 +3249,37 @@ var Deque = class extends LinearBase {
2998
3249
 
2999
3250
 
3000
3251
 
3252
+
3253
+
3254
+
3255
+
3256
+
3257
+ * @example
3258
+ * // Deque peek at both ends
3259
+ * const deque = new Deque<number>([10, 20, 30, 40, 50]);
3260
+ *
3261
+ * // Get first element without removing
3262
+ * const first = deque.at(0);
3263
+ * console.log(first); // 10;
3264
+ *
3265
+ * // Get last element without removing
3266
+ * const last = deque.at(deque.length - 1);
3267
+ * console.log(last); // 50;
3268
+ *
3269
+ * // Length unchanged
3270
+ * console.log(deque.length); // 5;
3271
+ */
3272
+ /**
3273
+ * Peek at the front element without removing it (alias for `first`).
3274
+ * @remarks Time O(1), Space O(1)
3275
+ * @returns Front element or undefined.
3276
+ */
3277
+ peek() {
3278
+ return this.first;
3279
+ }
3280
+ /**
3281
+ * Deque peek at both ends
3282
+
3001
3283
 
3002
3284
 
3003
3285
  * @example
@@ -3050,6 +3332,13 @@ var Deque = class extends LinearBase {
3050
3332
 
3051
3333
 
3052
3334
 
3335
+
3336
+
3337
+
3338
+
3339
+
3340
+
3341
+
3053
3342
 
3054
3343
 
3055
3344
 
@@ -3113,6 +3402,13 @@ var Deque = class extends LinearBase {
3113
3402
 
3114
3403
 
3115
3404
 
3405
+
3406
+
3407
+
3408
+
3409
+
3410
+
3411
+
3116
3412
 
3117
3413
 
3118
3414
 
@@ -3189,6 +3485,13 @@ var Deque = class extends LinearBase {
3189
3485
 
3190
3486
 
3191
3487
 
3488
+
3489
+
3490
+
3491
+
3492
+
3493
+
3494
+
3192
3495
 
3193
3496
 
3194
3497
 
@@ -3252,6 +3555,13 @@ var Deque = class extends LinearBase {
3252
3555
 
3253
3556
 
3254
3557
 
3558
+
3559
+
3560
+
3561
+
3562
+
3563
+
3564
+
3255
3565
 
3256
3566
 
3257
3567
 
@@ -3316,6 +3626,13 @@ var Deque = class extends LinearBase {
3316
3626
 
3317
3627
 
3318
3628
 
3629
+
3630
+
3631
+
3632
+
3633
+
3634
+
3635
+
3319
3636
 
3320
3637
 
3321
3638
 
@@ -3421,6 +3738,13 @@ var Deque = class extends LinearBase {
3421
3738
 
3422
3739
 
3423
3740
 
3741
+
3742
+
3743
+
3744
+
3745
+
3746
+
3747
+
3424
3748
 
3425
3749
 
3426
3750
 
@@ -3466,6 +3790,13 @@ var Deque = class extends LinearBase {
3466
3790
 
3467
3791
 
3468
3792
 
3793
+
3794
+
3795
+
3796
+
3797
+
3798
+
3799
+
3469
3800
 
3470
3801
 
3471
3802
 
@@ -3515,6 +3846,13 @@ var Deque = class extends LinearBase {
3515
3846
 
3516
3847
 
3517
3848
 
3849
+
3850
+
3851
+
3852
+
3853
+
3854
+
3855
+
3518
3856
 
3519
3857
 
3520
3858
 
@@ -3715,6 +4053,13 @@ var Deque = class extends LinearBase {
3715
4053
 
3716
4054
 
3717
4055
 
4056
+
4057
+
4058
+
4059
+
4060
+
4061
+
4062
+
3718
4063
 
3719
4064
 
3720
4065
 
@@ -3809,6 +4154,68 @@ var Deque = class extends LinearBase {
3809
4154
 
3810
4155
 
3811
4156
 
4157
+
4158
+
4159
+
4160
+
4161
+
4162
+ * @example
4163
+ * // Deque for...of iteration and reverse
4164
+ * const deque = new Deque<string>(['A', 'B', 'C', 'D']);
4165
+ *
4166
+ * // Iterate forward
4167
+ * const forward: string[] = [];
4168
+ * for (const item of deque) {
4169
+ * forward.push(item);
4170
+ * }
4171
+ * console.log(forward); // ['A', 'B', 'C', 'D'];
4172
+ *
4173
+ * // Reverse the deque
4174
+ * deque.reverse();
4175
+ * const backward: string[] = [];
4176
+ * for (const item of deque) {
4177
+ * backward.push(item);
4178
+ * }
4179
+ * console.log(backward); // ['D', 'C', 'B', 'A'];
4180
+ */
4181
+ /**
4182
+ * Find the last value matching a predicate (scans back-to-front).
4183
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
4184
+ * @param predicate - Function called with (value, index, deque).
4185
+ * @returns Matching value or undefined.
4186
+ * @example
4187
+ * // Find last matching value
4188
+ * const d = new Deque([1, 2, 3, 4, 5]);
4189
+ * console.log(d.findLast(v => v > 2)); // 5;
4190
+ * console.log(d.findLast(v => v % 2 === 0)); // 4;
4191
+ */
4192
+ findLast(predicate) {
4193
+ for (let i = this.length - 1; i >= 0; i--) {
4194
+ const val = this.at(i);
4195
+ if (predicate(val, i, this)) return val;
4196
+ }
4197
+ return void 0;
4198
+ }
4199
+ /**
4200
+ * Find the index of the last value matching a predicate (scans back-to-front).
4201
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
4202
+ * @param predicate - Function called with (value, index, deque).
4203
+ * @returns Matching index, or -1 if not found.
4204
+ * @example
4205
+ * // Find last matching index
4206
+ * const d = new Deque([10, 20, 30, 20, 10]);
4207
+ * console.log(d.findLastIndex(v => v === 20)); // 3;
4208
+ * console.log(d.findLastIndex(v => v === 10)); // 4;
4209
+ */
4210
+ findLastIndex(predicate) {
4211
+ for (let i = this.length - 1; i >= 0; i--) {
4212
+ if (predicate(this.at(i), i, this)) return i;
4213
+ }
4214
+ return -1;
4215
+ }
4216
+ /**
4217
+ * Deque for...of iteration and reverse
4218
+
3812
4219
 
3813
4220
  * @example
3814
4221
  * // Deque for...of iteration and reverse
@@ -3914,6 +4321,13 @@ var Deque = class extends LinearBase {
3914
4321
 
3915
4322
 
3916
4323
 
4324
+
4325
+
4326
+
4327
+
4328
+
4329
+
4330
+
3917
4331
 
3918
4332
 
3919
4333
 
@@ -3985,6 +4399,13 @@ var Deque = class extends LinearBase {
3985
4399
 
3986
4400
 
3987
4401
 
4402
+
4403
+
4404
+
4405
+
4406
+
4407
+
4408
+
3988
4409
 
3989
4410
 
3990
4411
 
@@ -4039,6 +4460,13 @@ var Deque = class extends LinearBase {
4039
4460
 
4040
4461
 
4041
4462
 
4463
+
4464
+
4465
+
4466
+
4467
+
4468
+
4469
+
4042
4470
 
4043
4471
 
4044
4472
 
@@ -4113,6 +4541,13 @@ var Deque = class extends LinearBase {
4113
4541
 
4114
4542
 
4115
4543
 
4544
+
4545
+
4546
+
4547
+
4548
+
4549
+
4550
+
4116
4551
 
4117
4552
 
4118
4553