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 } }