Skip to content

Instantly share code, notes, and snippets.

@VegaFromLyra
Created June 2, 2015 22:00
Show Gist options
  • Save VegaFromLyra/5458bb5b4ceaca14a0a7 to your computer and use it in GitHub Desktop.
Save VegaFromLyra/5458bb5b4ceaca14a0a7 to your computer and use it in GitHub Desktop.
Build a queue using 2 stacks
using System;
using System.Collections.Generic;
// Implement a queue using two stacks
namespace QueueUsingStacks
{
public class Program
{
public static void Main(string[] args)
{
Queue queue = new Queue();
queue.Enqueue(1);
Console.WriteLine("Enqueue 1");
queue.Enqueue(2);
Console.WriteLine("Enqueue 2");
queue.Enqueue(3);
Console.WriteLine("Enqueue 3");
test(queue.Dequeue(), 1);
queue.Enqueue(4);
Console.WriteLine("Enqueue 4");
queue.Enqueue(5);
Console.WriteLine("Enqueue 5");
test(queue.Dequeue(), 2);
}
static void test(int val, int expected) {
Console.WriteLine("Dequeued value is {0}, expected {1}", val, expected);
}
}
class Queue {
Stack<int> inStack;
Stack<int> outStack;
public Queue() {
inStack = new Stack<int>();
outStack = new Stack<int>();
}
// O(1)
public void Enqueue(int value) {
inStack.Push(value);
}
// Amortized O(n) for n items in queue
public int Dequeue() {
if (outStack.Count == 0) {
while (inStack.Count > 0) {
outStack.Push(inStack.Pop());
}
}
return outStack.Pop();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment