Stacks and Queues
Queue from Two Stacks
Implement queue behavior with an input stack and an output stack.
Algorithm
Basic Implementation
basic.dart
String render(List<int> values) => values.join(' -> ');
void main() {
final inStack = <int>[];
final outStack = <int>[];
for (final value in [10, 20, 30]) { inStack.add(value); }
while (inStack.isNotEmpty) { outStack.add(inStack.removeLast()); }
final removed = <int>[];
while (outStack.isNotEmpty) { removed.add(outStack.removeLast()); }
print(render(removed));
}
Complexity
- Time: O(1) amortized per operation
- Space: O(n)
Implementation notes
- Keep the explicit stack/queue operations. Library shortcuts that only produce the final list hide the data-structure behavior this lesson is meant to replay.
- The final output uses a deterministic
a -> b -> cformat for cross-language comparison.
input stack
Enqueue pushes new values onto the input stack.
output stack
When the output stack is empty, transferring all input values reverses them into dequeue order.