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
@@ -160,6 +160,35 @@ var _IterableElementBase = class _IterableElementBase {
160
160
  for (const ele of this) if (ele === element) return true;
161
161
  return false;
162
162
  }
163
+ /**
164
+ * Check whether a value exists (Array-compatible alias for `has`).
165
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
166
+ * @param element - Element to search for (uses `===`).
167
+ * @returns `true` if found.
168
+ */
169
+ includes(element) {
170
+ return this.has(element);
171
+ }
172
+ /**
173
+ * Return an iterator of `[index, value]` pairs (Array-compatible).
174
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
175
+ */
176
+ *entries() {
177
+ let index = 0;
178
+ for (const value of this) {
179
+ yield [index++, value];
180
+ }
181
+ }
182
+ /**
183
+ * Return an iterator of numeric indices (Array-compatible).
184
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
185
+ */
186
+ *keys() {
187
+ let index = 0;
188
+ for (const _ of this) {
189
+ yield index++;
190
+ }
191
+ }
163
192
  /**
164
193
  * Reduces all elements to a single accumulated value.
165
194
  *
@@ -468,6 +497,16 @@ var _LinearBase = class _LinearBase extends IterableElementBase {
468
497
  }
469
498
  return this;
470
499
  }
500
+ /**
501
+ * Return a new instance of the same type with elements in reverse order (non-mutating).
502
+ * @remarks Provided for familiarity when migrating from Array (ES2023 `toReversed`). Time O(n), Space O(n).
503
+ * @returns A new reversed instance.
504
+ */
505
+ toReversed() {
506
+ const cloned = this.clone();
507
+ cloned.reverse();
508
+ return cloned;
509
+ }
471
510
  };
472
511
  __name(_LinearBase, "LinearBase");
473
512
  var LinearBase = _LinearBase;
@@ -758,6 +797,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
758
797
 
759
798
 
760
799
 
800
+
801
+
802
+
803
+
804
+
805
+
806
+
761
807
 
762
808
 
763
809
 
@@ -825,6 +871,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
825
871
 
826
872
 
827
873
 
874
+
875
+
876
+
877
+
878
+
879
+
880
+
828
881
 
829
882
 
830
883
 
@@ -898,6 +951,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
898
951
 
899
952
 
900
953
 
954
+
955
+
956
+
957
+
958
+
959
+
960
+
901
961
 
902
962
 
903
963
 
@@ -952,6 +1012,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
952
1012
 
953
1013
 
954
1014
 
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
955
1022
 
956
1023
 
957
1024
 
@@ -1067,6 +1134,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1067
1134
 
1068
1135
 
1069
1136
 
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1070
1144
 
1071
1145
 
1072
1146
 
@@ -1126,6 +1200,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1126
1200
 
1127
1201
 
1128
1202
 
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1129
1210
 
1130
1211
 
1131
1212
 
@@ -1174,6 +1255,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1174
1255
 
1175
1256
 
1176
1257
 
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1177
1265
 
1178
1266
 
1179
1267
 
@@ -1228,6 +1316,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1228
1316
 
1229
1317
 
1230
1318
 
1319
+
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+
1231
1326
 
1232
1327
 
1233
1328
 
@@ -1287,6 +1382,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1287
1382
 
1288
1383
 
1289
1384
 
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1290
1392
 
1291
1393
 
1292
1394
 
@@ -1354,6 +1456,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1354
1456
 
1355
1457
 
1356
1458
 
1459
+
1460
+
1461
+
1462
+
1463
+
1464
+
1465
+
1357
1466
 
1358
1467
 
1359
1468
 
@@ -1398,6 +1507,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1398
1507
 
1399
1508
 
1400
1509
 
1510
+
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1401
1517
 
1402
1518
 
1403
1519
 
@@ -1448,6 +1564,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1448
1564
 
1449
1565
 
1450
1566
 
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1451
1574
 
1452
1575
 
1453
1576
 
@@ -1664,6 +1787,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1664
1787
 
1665
1788
 
1666
1789
 
1790
+
1791
+
1792
+
1793
+
1794
+
1795
+
1796
+
1667
1797
 
1668
1798
 
1669
1799
 
@@ -1718,6 +1848,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1718
1848
 
1719
1849
 
1720
1850
 
1851
+
1852
+
1853
+
1854
+
1855
+
1856
+
1857
+
1721
1858
 
1722
1859
 
1723
1860
 
@@ -1800,6 +1937,13 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
1800
1937
 
1801
1938
 
1802
1939
 
1940
+
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+
1803
1947
 
1804
1948
 
1805
1949
 
@@ -2034,6 +2178,13 @@ var _Queue = class _Queue extends LinearBase {
2034
2178
 
2035
2179
 
2036
2180
 
2181
+
2182
+
2183
+
2184
+
2185
+
2186
+
2187
+
2037
2188
 
2038
2189
 
2039
2190
 
@@ -2084,6 +2235,13 @@ var _Queue = class _Queue extends LinearBase {
2084
2235
 
2085
2236
 
2086
2237
 
2238
+
2239
+
2240
+
2241
+
2242
+
2243
+
2244
+
2087
2245
 
2088
2246
 
2089
2247
 
@@ -2101,6 +2259,14 @@ var _Queue = class _Queue extends LinearBase {
2101
2259
  get first() {
2102
2260
  return this.length > 0 ? this.elements[this._offset] : void 0;
2103
2261
  }
2262
+ /**
2263
+ * Peek at the front element without removing it (alias for `first`).
2264
+ * @remarks Time O(1), Space O(1)
2265
+ * @returns Front element or undefined.
2266
+ */
2267
+ peek() {
2268
+ return this.first;
2269
+ }
2104
2270
  /**
2105
2271
  * Get the last element (back) without removing it.
2106
2272
  * @remarks Time O(1), Space O(1)
@@ -2150,6 +2316,13 @@ var _Queue = class _Queue extends LinearBase {
2150
2316
 
2151
2317
 
2152
2318
 
2319
+
2320
+
2321
+
2322
+
2323
+
2324
+
2325
+
2153
2326
 
2154
2327
 
2155
2328
 
@@ -2212,6 +2385,13 @@ var _Queue = class _Queue extends LinearBase {
2212
2385
 
2213
2386
 
2214
2387
 
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+
2215
2395
 
2216
2396
 
2217
2397
 
@@ -2281,6 +2461,13 @@ var _Queue = class _Queue extends LinearBase {
2281
2461
 
2282
2462
 
2283
2463
 
2464
+
2465
+
2466
+
2467
+
2468
+
2469
+
2470
+
2284
2471
 
2285
2472
 
2286
2473
 
@@ -2340,6 +2527,13 @@ var _Queue = class _Queue extends LinearBase {
2340
2527
 
2341
2528
 
2342
2529
 
2530
+
2531
+
2532
+
2533
+
2534
+
2535
+
2536
+
2343
2537
 
2344
2538
 
2345
2539
 
@@ -2392,6 +2586,13 @@ var _Queue = class _Queue extends LinearBase {
2392
2586
 
2393
2587
 
2394
2588
 
2589
+
2590
+
2591
+
2592
+
2593
+
2594
+
2595
+
2395
2596
 
2396
2597
 
2397
2598
 
@@ -2446,6 +2647,21 @@ var _Queue = class _Queue extends LinearBase {
2446
2647
  this._elements[this._offset + index] = newElement;
2447
2648
  return true;
2448
2649
  }
2650
+ /**
2651
+ * Delete the first element that satisfies a predicate.
2652
+ * @remarks Time O(N), Space O(N)
2653
+ * @param predicate - Function (value, index, queue) → boolean to decide deletion.
2654
+ * @returns True if a match was removed.
2655
+ */
2656
+ deleteWhere(predicate) {
2657
+ for (let i = 0; i < this.length; i++) {
2658
+ if (predicate(this._elements[this._offset + i], i, this)) {
2659
+ this.deleteAt(i);
2660
+ return true;
2661
+ }
2662
+ }
2663
+ return false;
2664
+ }
2449
2665
  /**
2450
2666
  * Reverse the queue in-place by compacting then reversing.
2451
2667
  * @remarks Time O(N), Space O(N)
@@ -2485,6 +2701,13 @@ var _Queue = class _Queue extends LinearBase {
2485
2701
 
2486
2702
 
2487
2703
 
2704
+
2705
+
2706
+
2707
+
2708
+
2709
+
2710
+
2488
2711
 
2489
2712
 
2490
2713
 
@@ -2531,6 +2754,13 @@ var _Queue = class _Queue extends LinearBase {
2531
2754
 
2532
2755
 
2533
2756
 
2757
+
2758
+
2759
+
2760
+
2761
+
2762
+
2763
+
2534
2764
 
2535
2765
 
2536
2766
 
@@ -2600,6 +2830,13 @@ var _Queue = class _Queue extends LinearBase {
2600
2830
 
2601
2831
 
2602
2832
 
2833
+
2834
+
2835
+
2836
+
2837
+
2838
+
2839
+
2603
2840
 
2604
2841
 
2605
2842
 
@@ -2653,6 +2890,13 @@ var _Queue = class _Queue extends LinearBase {
2653
2890
 
2654
2891
 
2655
2892
 
2893
+
2894
+
2895
+
2896
+
2897
+
2898
+
2899
+
2656
2900
 
2657
2901
 
2658
2902
 
@@ -2710,6 +2954,13 @@ var _Queue = class _Queue extends LinearBase {
2710
2954
 
2711
2955
 
2712
2956
 
2957
+
2958
+
2959
+
2960
+
2961
+
2962
+
2963
+
2713
2964
 
2714
2965
 
2715
2966
 
@@ -2994,6 +3245,37 @@ var _Deque = class _Deque extends LinearBase {
2994
3245
 
2995
3246
 
2996
3247
 
3248
+
3249
+
3250
+
3251
+
3252
+
3253
+ * @example
3254
+ * // Deque peek at both ends
3255
+ * const deque = new Deque<number>([10, 20, 30, 40, 50]);
3256
+ *
3257
+ * // Get first element without removing
3258
+ * const first = deque.at(0);
3259
+ * console.log(first); // 10;
3260
+ *
3261
+ * // Get last element without removing
3262
+ * const last = deque.at(deque.length - 1);
3263
+ * console.log(last); // 50;
3264
+ *
3265
+ * // Length unchanged
3266
+ * console.log(deque.length); // 5;
3267
+ */
3268
+ /**
3269
+ * Peek at the front element without removing it (alias for `first`).
3270
+ * @remarks Time O(1), Space O(1)
3271
+ * @returns Front element or undefined.
3272
+ */
3273
+ peek() {
3274
+ return this.first;
3275
+ }
3276
+ /**
3277
+ * Deque peek at both ends
3278
+
2997
3279
 
2998
3280
 
2999
3281
  * @example
@@ -3046,6 +3328,13 @@ var _Deque = class _Deque extends LinearBase {
3046
3328
 
3047
3329
 
3048
3330
 
3331
+
3332
+
3333
+
3334
+
3335
+
3336
+
3337
+
3049
3338
 
3050
3339
 
3051
3340
 
@@ -3109,6 +3398,13 @@ var _Deque = class _Deque extends LinearBase {
3109
3398
 
3110
3399
 
3111
3400
 
3401
+
3402
+
3403
+
3404
+
3405
+
3406
+
3407
+
3112
3408
 
3113
3409
 
3114
3410
 
@@ -3185,6 +3481,13 @@ var _Deque = class _Deque extends LinearBase {
3185
3481
 
3186
3482
 
3187
3483
 
3484
+
3485
+
3486
+
3487
+
3488
+
3489
+
3490
+
3188
3491
 
3189
3492
 
3190
3493
 
@@ -3248,6 +3551,13 @@ var _Deque = class _Deque extends LinearBase {
3248
3551
 
3249
3552
 
3250
3553
 
3554
+
3555
+
3556
+
3557
+
3558
+
3559
+
3560
+
3251
3561
 
3252
3562
 
3253
3563
 
@@ -3312,6 +3622,13 @@ var _Deque = class _Deque extends LinearBase {
3312
3622
 
3313
3623
 
3314
3624
 
3625
+
3626
+
3627
+
3628
+
3629
+
3630
+
3631
+
3315
3632
 
3316
3633
 
3317
3634
 
@@ -3417,6 +3734,13 @@ var _Deque = class _Deque extends LinearBase {
3417
3734
 
3418
3735
 
3419
3736
 
3737
+
3738
+
3739
+
3740
+
3741
+
3742
+
3743
+
3420
3744
 
3421
3745
 
3422
3746
 
@@ -3462,6 +3786,13 @@ var _Deque = class _Deque extends LinearBase {
3462
3786
 
3463
3787
 
3464
3788
 
3789
+
3790
+
3791
+
3792
+
3793
+
3794
+
3795
+
3465
3796
 
3466
3797
 
3467
3798
 
@@ -3511,6 +3842,13 @@ var _Deque = class _Deque extends LinearBase {
3511
3842
 
3512
3843
 
3513
3844
 
3845
+
3846
+
3847
+
3848
+
3849
+
3850
+
3851
+
3514
3852
 
3515
3853
 
3516
3854
 
@@ -3711,6 +4049,13 @@ var _Deque = class _Deque extends LinearBase {
3711
4049
 
3712
4050
 
3713
4051
 
4052
+
4053
+
4054
+
4055
+
4056
+
4057
+
4058
+
3714
4059
 
3715
4060
 
3716
4061
 
@@ -3805,6 +4150,68 @@ var _Deque = class _Deque extends LinearBase {
3805
4150
 
3806
4151
 
3807
4152
 
4153
+
4154
+
4155
+
4156
+
4157
+
4158
+ * @example
4159
+ * // Deque for...of iteration and reverse
4160
+ * const deque = new Deque<string>(['A', 'B', 'C', 'D']);
4161
+ *
4162
+ * // Iterate forward
4163
+ * const forward: string[] = [];
4164
+ * for (const item of deque) {
4165
+ * forward.push(item);
4166
+ * }
4167
+ * console.log(forward); // ['A', 'B', 'C', 'D'];
4168
+ *
4169
+ * // Reverse the deque
4170
+ * deque.reverse();
4171
+ * const backward: string[] = [];
4172
+ * for (const item of deque) {
4173
+ * backward.push(item);
4174
+ * }
4175
+ * console.log(backward); // ['D', 'C', 'B', 'A'];
4176
+ */
4177
+ /**
4178
+ * Find the last value matching a predicate (scans back-to-front).
4179
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
4180
+ * @param predicate - Function called with (value, index, deque).
4181
+ * @returns Matching value or undefined.
4182
+ * @example
4183
+ * // Find last matching value
4184
+ * const d = new Deque([1, 2, 3, 4, 5]);
4185
+ * console.log(d.findLast(v => v > 2)); // 5;
4186
+ * console.log(d.findLast(v => v % 2 === 0)); // 4;
4187
+ */
4188
+ findLast(predicate) {
4189
+ for (let i = this.length - 1; i >= 0; i--) {
4190
+ const val = this.at(i);
4191
+ if (predicate(val, i, this)) return val;
4192
+ }
4193
+ return void 0;
4194
+ }
4195
+ /**
4196
+ * Find the index of the last value matching a predicate (scans back-to-front).
4197
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
4198
+ * @param predicate - Function called with (value, index, deque).
4199
+ * @returns Matching index, or -1 if not found.
4200
+ * @example
4201
+ * // Find last matching index
4202
+ * const d = new Deque([10, 20, 30, 20, 10]);
4203
+ * console.log(d.findLastIndex(v => v === 20)); // 3;
4204
+ * console.log(d.findLastIndex(v => v === 10)); // 4;
4205
+ */
4206
+ findLastIndex(predicate) {
4207
+ for (let i = this.length - 1; i >= 0; i--) {
4208
+ if (predicate(this.at(i), i, this)) return i;
4209
+ }
4210
+ return -1;
4211
+ }
4212
+ /**
4213
+ * Deque for...of iteration and reverse
4214
+
3808
4215
 
3809
4216
  * @example
3810
4217
  * // Deque for...of iteration and reverse
@@ -3910,6 +4317,13 @@ var _Deque = class _Deque extends LinearBase {
3910
4317
 
3911
4318
 
3912
4319
 
4320
+
4321
+
4322
+
4323
+
4324
+
4325
+
4326
+
3913
4327
 
3914
4328
 
3915
4329
 
@@ -3981,6 +4395,13 @@ var _Deque = class _Deque extends LinearBase {
3981
4395
 
3982
4396
 
3983
4397
 
4398
+
4399
+
4400
+
4401
+
4402
+
4403
+
4404
+
3984
4405
 
3985
4406
 
3986
4407
 
@@ -4035,6 +4456,13 @@ var _Deque = class _Deque extends LinearBase {
4035
4456
 
4036
4457
 
4037
4458
 
4459
+
4460
+
4461
+
4462
+
4463
+
4464
+
4465
+
4038
4466
 
4039
4467
 
4040
4468
 
@@ -4109,6 +4537,13 @@ var _Deque = class _Deque extends LinearBase {
4109
4537
 
4110
4538
 
4111
4539
 
4540
+
4541
+
4542
+
4543
+
4544
+
4545
+
4546
+
4112
4547
 
4113
4548
 
4114
4549