Stacks and Queues
Queue from Two Stacks
Implement queue behavior with an input stack and an output stack.
Algorithm
Basic Implementation
basic.cs
using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static string Render(List<int> values) => string.Join(" -> ", values);
static void Main() {
var inStack = new Stack<int>();
var outStack = new Stack<int>();
foreach (var value in new[] {10, 20, 30}) inStack.Push(value);
while (inStack.Count > 0) outStack.Push(inStack.Pop());
var removed = new List<int>();
while (outStack.Count > 0) removed.Add(outStack.Pop());
Console.WriteLine(Render(removed));
}
}
Complexity
- Time: O(1) amortized per operation
- Space: O(n)
Implementation notes
Stack<int>is the BCL LIFO container; both stacks use managed backing storage that grows as needed and is reclaimed by GC.Pop()would throw on an empty stack, so each transfer/removal loop is guarded byCount > 0.- Moving every item from
inStacktooutStackreverses order once, making the batched transfer explicit before values are collected into aList<int>only for deterministic rendering.
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.