queue-typed 2.2.2 → 2.2.3

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 (40) hide show
  1. package/README.md +97 -37
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs-legacy/index.cjs.map +1 -1
  4. package/dist/esm/index.mjs.map +1 -1
  5. package/dist/esm-legacy/index.mjs.map +1 -1
  6. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +96 -2
  7. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +103 -7
  8. package/dist/types/data-structures/binary-tree/bst.d.ts +156 -13
  9. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +84 -35
  10. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
  11. package/dist/types/data-structures/graph/directed-graph.d.ts +126 -1
  12. package/dist/types/data-structures/graph/undirected-graph.d.ts +160 -1
  13. package/dist/types/data-structures/hash/hash-map.d.ts +110 -27
  14. package/dist/types/data-structures/heap/heap.d.ts +107 -58
  15. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +72 -404
  16. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -5
  17. package/dist/types/data-structures/queue/deque.d.ts +95 -67
  18. package/dist/types/data-structures/queue/queue.d.ts +90 -34
  19. package/dist/types/data-structures/stack/stack.d.ts +58 -40
  20. package/dist/types/data-structures/trie/trie.d.ts +109 -47
  21. package/dist/types/interfaces/binary-tree.d.ts +1 -0
  22. package/dist/umd/queue-typed.js.map +1 -1
  23. package/dist/umd/queue-typed.min.js.map +1 -1
  24. package/package.json +2 -2
  25. package/src/data-structures/binary-tree/avl-tree.ts +96 -2
  26. package/src/data-structures/binary-tree/binary-tree.ts +117 -7
  27. package/src/data-structures/binary-tree/bst.ts +322 -13
  28. package/src/data-structures/binary-tree/red-black-tree.ts +84 -35
  29. package/src/data-structures/binary-tree/tree-multi-map.ts +2 -2
  30. package/src/data-structures/graph/directed-graph.ts +126 -1
  31. package/src/data-structures/graph/undirected-graph.ts +160 -1
  32. package/src/data-structures/hash/hash-map.ts +110 -27
  33. package/src/data-structures/heap/heap.ts +107 -58
  34. package/src/data-structures/linked-list/doubly-linked-list.ts +72 -404
  35. package/src/data-structures/linked-list/singly-linked-list.ts +121 -5
  36. package/src/data-structures/queue/deque.ts +95 -67
  37. package/src/data-structures/queue/queue.ts +90 -34
  38. package/src/data-structures/stack/stack.ts +58 -40
  39. package/src/data-structures/trie/trie.ts +109 -47
  40. package/src/interfaces/binary-tree.ts +2 -0
package/README.md CHANGED
@@ -94,55 +94,115 @@ for (let i = 0; i < magnitude; i++) {
94
94
 
95
95
  [//]: # (No deletion!!! Start of Example Replace Section)
96
96
 
97
- ### Sliding Window using Queue
97
+ ### basic Queue creation and push operation
98
98
  ```typescript
99
- const nums = [2, 3, 4, 1, 5];
100
- const k = 2;
101
- const queue = new Queue<number>();
99
+ // Create a simple Queue with initial values
100
+ const queue = new Queue([1, 2, 3, 4, 5]);
102
101
 
103
- let maxSum = 0;
104
- let currentSum = 0;
102
+ // Verify the queue maintains insertion order
103
+ console.log([...queue]); // [1, 2, 3, 4, 5];
105
104
 
106
- nums.forEach(num => {
107
- queue.push(num);
108
- currentSum += num;
105
+ // Check length
106
+ console.log(queue.length); // 5;
107
+ ```
109
108
 
110
- if (queue.length > k) {
111
- currentSum -= queue.shift()!;
112
- }
109
+ ### Queue shift and peek operations
110
+ ```typescript
111
+ const queue = new Queue<number>([10, 20, 30, 40]);
113
112
 
114
- if (queue.length === k) {
115
- maxSum = Math.max(maxSum, currentSum);
116
- }
117
- });
113
+ // Peek at the front element without removing it
114
+ console.log(queue.first); // 10;
115
+
116
+ // Remove and get the first element (FIFO)
117
+ const first = queue.shift();
118
+ console.log(first); // 10;
119
+
120
+ // Verify remaining elements and length decreased
121
+ console.log([...queue]); // [20, 30, 40];
122
+ console.log(queue.length); // 3;
123
+ ```
124
+
125
+ ### Queue for...of iteration and isEmpty check
126
+ ```typescript
127
+ const queue = new Queue<string>(['A', 'B', 'C', 'D']);
118
128
 
119
- console.log(maxSum); // 7
129
+ const elements: string[] = [];
130
+ for (const item of queue) {
131
+ elements.push(item);
132
+ }
133
+
134
+ // Verify all elements are iterated in order
135
+ console.log(elements); // ['A', 'B', 'C', 'D'];
136
+
137
+ // Process all elements
138
+ while (queue.length > 0) {
139
+ queue.shift();
140
+ }
141
+
142
+ console.log(queue.length); // 0;
120
143
  ```
121
144
 
122
- ### Breadth-First Search (BFS) using Queue
145
+ ### Queue as message broker for event processing
123
146
  ```typescript
124
- const graph: { [key in number]: number[] } = {
125
- 1: [2, 3],
126
- 2: [4, 5],
127
- 3: [],
128
- 4: [],
129
- 5: []
130
- };
131
-
132
- const queue = new Queue<number>();
133
- const visited: number[] = [];
134
-
135
- queue.push(1);
136
-
137
- while (!queue.isEmpty()) {
138
- const node = queue.shift()!;
139
- if (!visited.includes(node)) {
140
- visited.push(node);
141
- graph[node].forEach(neighbor => queue.push(neighbor));
147
+ interface Message {
148
+ id: string;
149
+ type: 'email' | 'sms' | 'push';
150
+ recipient: string;
151
+ content: string;
152
+ timestamp: Date;
153
+ }
154
+
155
+ // Create a message queue for real-time event processing
156
+ const messageQueue = new Queue<Message>([
157
+ {
158
+ id: 'msg-001',
159
+ type: 'email',
160
+ recipient: 'user@example.com',
161
+ content: 'Welcome!',
162
+ timestamp: new Date()
163
+ },
164
+ {
165
+ id: 'msg-002',
166
+ type: 'sms',
167
+ recipient: '+1234567890',
168
+ content: 'OTP: 123456',
169
+ timestamp: new Date()
170
+ },
171
+ {
172
+ id: 'msg-003',
173
+ type: 'push',
174
+ recipient: 'device-token-xyz',
175
+ content: 'New notification',
176
+ timestamp: new Date()
177
+ },
178
+ {
179
+ id: 'msg-004',
180
+ type: 'email',
181
+ recipient: 'admin@example.com',
182
+ content: 'Daily report',
183
+ timestamp: new Date()
184
+ }
185
+ ]);
186
+
187
+ // Process messages in FIFO order (first message first)
188
+ const processedMessages: string[] = [];
189
+ while (messageQueue.length > 0) {
190
+ const message = messageQueue.shift();
191
+ if (message) {
192
+ processedMessages.push(`${message.type}:${message.recipient}`);
142
193
  }
143
194
  }
144
195
 
145
- console.log(visited); // [1, 2, 3, 4, 5]
196
+ // Verify messages were processed in order
197
+ console.log(processedMessages); // [
198
+ // 'email:user@example.com',
199
+ // 'sms:+1234567890',
200
+ // 'push:device-token-xyz',
201
+ // 'email:admin@example.com'
202
+ // ];
203
+
204
+ // Queue should be empty after processing all messages
205
+ console.log(messageQueue.length); // 0;
146
206
  ```
147
207
 
148
208
  [//]: # (No deletion!!! End of Example Replace Section)