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
@@ -159,6 +159,35 @@ var IterableElementBase = class {
159
159
  for (const ele of this) if (ele === element) return true;
160
160
  return false;
161
161
  }
162
+ /**
163
+ * Check whether a value exists (Array-compatible alias for `has`).
164
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
165
+ * @param element - Element to search for (uses `===`).
166
+ * @returns `true` if found.
167
+ */
168
+ includes(element) {
169
+ return this.has(element);
170
+ }
171
+ /**
172
+ * Return an iterator of `[index, value]` pairs (Array-compatible).
173
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
174
+ */
175
+ *entries() {
176
+ let index = 0;
177
+ for (const value of this) {
178
+ yield [index++, value];
179
+ }
180
+ }
181
+ /**
182
+ * Return an iterator of numeric indices (Array-compatible).
183
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
184
+ */
185
+ *keys() {
186
+ let index = 0;
187
+ for (const _ of this) {
188
+ yield index++;
189
+ }
190
+ }
162
191
  /**
163
192
  * Reduces all elements to a single accumulated value.
164
193
  *
@@ -469,6 +498,16 @@ var LinearBase = class _LinearBase extends IterableElementBase {
469
498
  }
470
499
  return this;
471
500
  }
501
+ /**
502
+ * Return a new instance of the same type with elements in reverse order (non-mutating).
503
+ * @remarks Provided for familiarity when migrating from Array (ES2023 `toReversed`). Time O(n), Space O(n).
504
+ * @returns A new reversed instance.
505
+ */
506
+ toReversed() {
507
+ const cloned = this.clone();
508
+ cloned.reverse();
509
+ return cloned;
510
+ }
472
511
  };
473
512
  var LinearLinkedBase = class extends LinearBase {
474
513
  static {
@@ -760,6 +799,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
760
799
 
761
800
 
762
801
 
802
+
803
+
804
+
805
+
806
+
807
+
808
+
763
809
 
764
810
 
765
811
 
@@ -827,6 +873,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
827
873
 
828
874
 
829
875
 
876
+
877
+
878
+
879
+
880
+
881
+
882
+
830
883
 
831
884
 
832
885
 
@@ -899,6 +952,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
899
952
 
900
953
 
901
954
 
955
+
956
+
957
+
958
+
959
+
960
+
961
+
902
962
 
903
963
 
904
964
 
@@ -953,6 +1013,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
953
1013
 
954
1014
 
955
1015
 
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
956
1023
 
957
1024
 
958
1025
 
@@ -1068,6 +1135,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1068
1135
 
1069
1136
 
1070
1137
 
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1071
1145
 
1072
1146
 
1073
1147
 
@@ -1127,6 +1201,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1127
1201
 
1128
1202
 
1129
1203
 
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1130
1211
 
1131
1212
 
1132
1213
 
@@ -1175,6 +1256,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1175
1256
 
1176
1257
 
1177
1258
 
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1178
1266
 
1179
1267
 
1180
1268
 
@@ -1229,6 +1317,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1229
1317
 
1230
1318
 
1231
1319
 
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+
1326
+
1232
1327
 
1233
1328
 
1234
1329
 
@@ -1288,6 +1383,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1288
1383
 
1289
1384
 
1290
1385
 
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1291
1393
 
1292
1394
 
1293
1395
 
@@ -1355,6 +1457,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1355
1457
 
1356
1458
 
1357
1459
 
1460
+
1461
+
1462
+
1463
+
1464
+
1465
+
1466
+
1358
1467
 
1359
1468
 
1360
1469
 
@@ -1399,6 +1508,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1399
1508
 
1400
1509
 
1401
1510
 
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+
1402
1518
 
1403
1519
 
1404
1520
 
@@ -1449,6 +1565,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1449
1565
 
1450
1566
 
1451
1567
 
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1452
1575
 
1453
1576
 
1454
1577
 
@@ -1665,6 +1788,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1665
1788
 
1666
1789
 
1667
1790
 
1791
+
1792
+
1793
+
1794
+
1795
+
1796
+
1797
+
1668
1798
 
1669
1799
 
1670
1800
 
@@ -1719,6 +1849,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1719
1849
 
1720
1850
 
1721
1851
 
1852
+
1853
+
1854
+
1855
+
1856
+
1857
+
1858
+
1722
1859
 
1723
1860
 
1724
1861
 
@@ -1801,6 +1938,13 @@ var SinglyLinkedList = class extends LinearLinkedBase {
1801
1938
 
1802
1939
 
1803
1940
 
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+
1947
+
1804
1948
 
1805
1949
 
1806
1950
 
@@ -2036,6 +2180,13 @@ var Queue = class _Queue extends LinearBase {
2036
2180
 
2037
2181
 
2038
2182
 
2183
+
2184
+
2185
+
2186
+
2187
+
2188
+
2189
+
2039
2190
 
2040
2191
 
2041
2192
 
@@ -2086,6 +2237,13 @@ var Queue = class _Queue extends LinearBase {
2086
2237
 
2087
2238
 
2088
2239
 
2240
+
2241
+
2242
+
2243
+
2244
+
2245
+
2246
+
2089
2247
 
2090
2248
 
2091
2249
 
@@ -2103,6 +2261,14 @@ var Queue = class _Queue extends LinearBase {
2103
2261
  get first() {
2104
2262
  return this.length > 0 ? this.elements[this._offset] : void 0;
2105
2263
  }
2264
+ /**
2265
+ * Peek at the front element without removing it (alias for `first`).
2266
+ * @remarks Time O(1), Space O(1)
2267
+ * @returns Front element or undefined.
2268
+ */
2269
+ peek() {
2270
+ return this.first;
2271
+ }
2106
2272
  /**
2107
2273
  * Get the last element (back) without removing it.
2108
2274
  * @remarks Time O(1), Space O(1)
@@ -2152,6 +2318,13 @@ var Queue = class _Queue extends LinearBase {
2152
2318
 
2153
2319
 
2154
2320
 
2321
+
2322
+
2323
+
2324
+
2325
+
2326
+
2327
+
2155
2328
 
2156
2329
 
2157
2330
 
@@ -2214,6 +2387,13 @@ var Queue = class _Queue extends LinearBase {
2214
2387
 
2215
2388
 
2216
2389
 
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
2217
2397
 
2218
2398
 
2219
2399
 
@@ -2283,6 +2463,13 @@ var Queue = class _Queue extends LinearBase {
2283
2463
 
2284
2464
 
2285
2465
 
2466
+
2467
+
2468
+
2469
+
2470
+
2471
+
2472
+
2286
2473
 
2287
2474
 
2288
2475
 
@@ -2342,6 +2529,13 @@ var Queue = class _Queue extends LinearBase {
2342
2529
 
2343
2530
 
2344
2531
 
2532
+
2533
+
2534
+
2535
+
2536
+
2537
+
2538
+
2345
2539
 
2346
2540
 
2347
2541
 
@@ -2394,6 +2588,13 @@ var Queue = class _Queue extends LinearBase {
2394
2588
 
2395
2589
 
2396
2590
 
2591
+
2592
+
2593
+
2594
+
2595
+
2596
+
2597
+
2397
2598
 
2398
2599
 
2399
2600
 
@@ -2448,6 +2649,21 @@ var Queue = class _Queue extends LinearBase {
2448
2649
  this._elements[this._offset + index] = newElement;
2449
2650
  return true;
2450
2651
  }
2652
+ /**
2653
+ * Delete the first element that satisfies a predicate.
2654
+ * @remarks Time O(N), Space O(N)
2655
+ * @param predicate - Function (value, index, queue) → boolean to decide deletion.
2656
+ * @returns True if a match was removed.
2657
+ */
2658
+ deleteWhere(predicate) {
2659
+ for (let i = 0; i < this.length; i++) {
2660
+ if (predicate(this._elements[this._offset + i], i, this)) {
2661
+ this.deleteAt(i);
2662
+ return true;
2663
+ }
2664
+ }
2665
+ return false;
2666
+ }
2451
2667
  /**
2452
2668
  * Reverse the queue in-place by compacting then reversing.
2453
2669
  * @remarks Time O(N), Space O(N)
@@ -2487,6 +2703,13 @@ var Queue = class _Queue extends LinearBase {
2487
2703
 
2488
2704
 
2489
2705
 
2706
+
2707
+
2708
+
2709
+
2710
+
2711
+
2712
+
2490
2713
 
2491
2714
 
2492
2715
 
@@ -2533,6 +2756,13 @@ var Queue = class _Queue extends LinearBase {
2533
2756
 
2534
2757
 
2535
2758
 
2759
+
2760
+
2761
+
2762
+
2763
+
2764
+
2765
+
2536
2766
 
2537
2767
 
2538
2768
 
@@ -2602,6 +2832,13 @@ var Queue = class _Queue extends LinearBase {
2602
2832
 
2603
2833
 
2604
2834
 
2835
+
2836
+
2837
+
2838
+
2839
+
2840
+
2841
+
2605
2842
 
2606
2843
 
2607
2844
 
@@ -2655,6 +2892,13 @@ var Queue = class _Queue extends LinearBase {
2655
2892
 
2656
2893
 
2657
2894
 
2895
+
2896
+
2897
+
2898
+
2899
+
2900
+
2901
+
2658
2902
 
2659
2903
 
2660
2904
 
@@ -2712,6 +2956,13 @@ var Queue = class _Queue extends LinearBase {
2712
2956
 
2713
2957
 
2714
2958
 
2959
+
2960
+
2961
+
2962
+
2963
+
2964
+
2965
+
2715
2966
 
2716
2967
 
2717
2968
 
@@ -2996,6 +3247,37 @@ var Deque = class extends LinearBase {
2996
3247
 
2997
3248
 
2998
3249
 
3250
+
3251
+
3252
+
3253
+
3254
+
3255
+ * @example
3256
+ * // Deque peek at both ends
3257
+ * const deque = new Deque<number>([10, 20, 30, 40, 50]);
3258
+ *
3259
+ * // Get first element without removing
3260
+ * const first = deque.at(0);
3261
+ * console.log(first); // 10;
3262
+ *
3263
+ * // Get last element without removing
3264
+ * const last = deque.at(deque.length - 1);
3265
+ * console.log(last); // 50;
3266
+ *
3267
+ * // Length unchanged
3268
+ * console.log(deque.length); // 5;
3269
+ */
3270
+ /**
3271
+ * Peek at the front element without removing it (alias for `first`).
3272
+ * @remarks Time O(1), Space O(1)
3273
+ * @returns Front element or undefined.
3274
+ */
3275
+ peek() {
3276
+ return this.first;
3277
+ }
3278
+ /**
3279
+ * Deque peek at both ends
3280
+
2999
3281
 
3000
3282
 
3001
3283
  * @example
@@ -3048,6 +3330,13 @@ var Deque = class extends LinearBase {
3048
3330
 
3049
3331
 
3050
3332
 
3333
+
3334
+
3335
+
3336
+
3337
+
3338
+
3339
+
3051
3340
 
3052
3341
 
3053
3342
 
@@ -3111,6 +3400,13 @@ var Deque = class extends LinearBase {
3111
3400
 
3112
3401
 
3113
3402
 
3403
+
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+
3114
3410
 
3115
3411
 
3116
3412
 
@@ -3187,6 +3483,13 @@ var Deque = class extends LinearBase {
3187
3483
 
3188
3484
 
3189
3485
 
3486
+
3487
+
3488
+
3489
+
3490
+
3491
+
3492
+
3190
3493
 
3191
3494
 
3192
3495
 
@@ -3250,6 +3553,13 @@ var Deque = class extends LinearBase {
3250
3553
 
3251
3554
 
3252
3555
 
3556
+
3557
+
3558
+
3559
+
3560
+
3561
+
3562
+
3253
3563
 
3254
3564
 
3255
3565
 
@@ -3314,6 +3624,13 @@ var Deque = class extends LinearBase {
3314
3624
 
3315
3625
 
3316
3626
 
3627
+
3628
+
3629
+
3630
+
3631
+
3632
+
3633
+
3317
3634
 
3318
3635
 
3319
3636
 
@@ -3419,6 +3736,13 @@ var Deque = class extends LinearBase {
3419
3736
 
3420
3737
 
3421
3738
 
3739
+
3740
+
3741
+
3742
+
3743
+
3744
+
3745
+
3422
3746
 
3423
3747
 
3424
3748
 
@@ -3464,6 +3788,13 @@ var Deque = class extends LinearBase {
3464
3788
 
3465
3789
 
3466
3790
 
3791
+
3792
+
3793
+
3794
+
3795
+
3796
+
3797
+
3467
3798
 
3468
3799
 
3469
3800
 
@@ -3513,6 +3844,13 @@ var Deque = class extends LinearBase {
3513
3844
 
3514
3845
 
3515
3846
 
3847
+
3848
+
3849
+
3850
+
3851
+
3852
+
3853
+
3516
3854
 
3517
3855
 
3518
3856
 
@@ -3713,6 +4051,13 @@ var Deque = class extends LinearBase {
3713
4051
 
3714
4052
 
3715
4053
 
4054
+
4055
+
4056
+
4057
+
4058
+
4059
+
4060
+
3716
4061
 
3717
4062
 
3718
4063
 
@@ -3807,6 +4152,68 @@ var Deque = class extends LinearBase {
3807
4152
 
3808
4153
 
3809
4154
 
4155
+
4156
+
4157
+
4158
+
4159
+
4160
+ * @example
4161
+ * // Deque for...of iteration and reverse
4162
+ * const deque = new Deque<string>(['A', 'B', 'C', 'D']);
4163
+ *
4164
+ * // Iterate forward
4165
+ * const forward: string[] = [];
4166
+ * for (const item of deque) {
4167
+ * forward.push(item);
4168
+ * }
4169
+ * console.log(forward); // ['A', 'B', 'C', 'D'];
4170
+ *
4171
+ * // Reverse the deque
4172
+ * deque.reverse();
4173
+ * const backward: string[] = [];
4174
+ * for (const item of deque) {
4175
+ * backward.push(item);
4176
+ * }
4177
+ * console.log(backward); // ['D', 'C', 'B', 'A'];
4178
+ */
4179
+ /**
4180
+ * Find the last value matching a predicate (scans back-to-front).
4181
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
4182
+ * @param predicate - Function called with (value, index, deque).
4183
+ * @returns Matching value or undefined.
4184
+ * @example
4185
+ * // Find last matching value
4186
+ * const d = new Deque([1, 2, 3, 4, 5]);
4187
+ * console.log(d.findLast(v => v > 2)); // 5;
4188
+ * console.log(d.findLast(v => v % 2 === 0)); // 4;
4189
+ */
4190
+ findLast(predicate) {
4191
+ for (let i = this.length - 1; i >= 0; i--) {
4192
+ const val = this.at(i);
4193
+ if (predicate(val, i, this)) return val;
4194
+ }
4195
+ return void 0;
4196
+ }
4197
+ /**
4198
+ * Find the index of the last value matching a predicate (scans back-to-front).
4199
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
4200
+ * @param predicate - Function called with (value, index, deque).
4201
+ * @returns Matching index, or -1 if not found.
4202
+ * @example
4203
+ * // Find last matching index
4204
+ * const d = new Deque([10, 20, 30, 20, 10]);
4205
+ * console.log(d.findLastIndex(v => v === 20)); // 3;
4206
+ * console.log(d.findLastIndex(v => v === 10)); // 4;
4207
+ */
4208
+ findLastIndex(predicate) {
4209
+ for (let i = this.length - 1; i >= 0; i--) {
4210
+ if (predicate(this.at(i), i, this)) return i;
4211
+ }
4212
+ return -1;
4213
+ }
4214
+ /**
4215
+ * Deque for...of iteration and reverse
4216
+
3810
4217
 
3811
4218
  * @example
3812
4219
  * // Deque for...of iteration and reverse
@@ -3912,6 +4319,13 @@ var Deque = class extends LinearBase {
3912
4319
 
3913
4320
 
3914
4321
 
4322
+
4323
+
4324
+
4325
+
4326
+
4327
+
4328
+
3915
4329
 
3916
4330
 
3917
4331
 
@@ -3983,6 +4397,13 @@ var Deque = class extends LinearBase {
3983
4397
 
3984
4398
 
3985
4399
 
4400
+
4401
+
4402
+
4403
+
4404
+
4405
+
4406
+
3986
4407
 
3987
4408
 
3988
4409
 
@@ -4037,6 +4458,13 @@ var Deque = class extends LinearBase {
4037
4458
 
4038
4459
 
4039
4460
 
4461
+
4462
+
4463
+
4464
+
4465
+
4466
+
4467
+
4040
4468
 
4041
4469
 
4042
4470
 
@@ -4111,6 +4539,13 @@ var Deque = class extends LinearBase {
4111
4539
 
4112
4540
 
4113
4541
 
4542
+
4543
+
4544
+
4545
+
4546
+
4547
+
4548
+
4114
4549
 
4115
4550
 
4116
4551