Created
June 2, 2015 22:00
-
-
Save VegaFromLyra/5458bb5b4ceaca14a0a7 to your computer and use it in GitHub Desktop.
Build a queue using 2 stacks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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