Implement queue behavior with an input stack and an output stack.

Algorithm

The replay uses the same three values in every language, so this C# DSA implementation can be compared directly with the rest of the DSA track.

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

  • 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 -> c format 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.