using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace MyCodeSnippets.CodingInterview.Chapter3_StacksAndQueues
{
[TestClass]
public class Task_3_4_MyQueueWithTwoStacks
{
[TestMethod]
public void BasicTest()
{
var queue = new MyQueue<int>();
// Sequence: 1, 2, 3, 4
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
var val = queue.Dequeue();
Assert.AreEqual(1, val);
val = queue.Dequeue();
Assert.AreEqual(2, val);
queue.Enqueue(5);
val = queue.Dequeue();
Assert.AreEqual(3, val);
val = queue.Dequeue();
Assert.AreEqual(4, val);
queue.Enqueue(6);
queue.Enqueue(7);
queue.Enqueue(8);
Assert.AreEqual(5, queue.Dequeue());
Assert.AreEqual(6, queue.Dequeue());
Assert.AreEqual(7, queue.Dequeue());
Assert.AreEqual(8, queue.Dequeue());
}
}
public class MyQueue<T>
{
private Stack<T> IntroStack = new Stack<T>();
private Stack<T> OutroStack = new Stack<T>();
public void Enqueue(T item)
{
IntroStack.Push(item);
}
public T Dequeue()
{
if (OutroStack.Count > 0)
{
return OutroStack.Pop();
}
while (IntroStack.Count > 0)
{
OutroStack.Push(IntroStack.Pop());
}
return OutroStack.Pop();
}
}
}