using System.Collections;
using System.Collections.Generic;
namespace Advanced.Algorithms.DataStructures.Foundation
{
///
/// A queue implementation.
///
public class Queue : IEnumerable
{
private readonly IQueue queue;
///
/// The number of items in the queue.
///
public int Count => queue.Count;
/// The queue implementation type.
public Queue(QueueType type = QueueType.Array)
{
if (type == QueueType.Array)
{
queue = new ArrayQueue();
}
else
{
queue = new LinkedListQueue();
}
}
///
/// Time complexity:O(1).
///
public void Enqueue(T item)
{
queue.Enqueue(item);
}
///
/// Time complexity:O(1).
///
public T Dequeue()
{
return queue.Dequeue();
}
public IEnumerator GetEnumerator()
{
return GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return queue.GetEnumerator();
}
}
internal interface IQueue : IEnumerable
{
int Count { get; }
void Enqueue(T item);
T Dequeue();
}
///
/// The queue implementation types.
///
public enum QueueType
{
Array = 0,
LinkedList = 1
}
}