public PriorityQueue(IEnumerable <T> contents) { Comparer = Comparer <T> .Default.Compare; _Buffer = contents.ToArray(); _Count = _Buffer.Length; HeapQueue <T> .Heapify(_Buffer, _Count, Comparer); }
public T Dequeue() { if (_Count <= 0) { throw new InvalidOperationException("The queue is empty."); } _Count -= 1; T result = _Buffer[0]; if (_Count > 0) { _Buffer[0] = _Buffer[_Count]; _Buffer[_Count] = default(T); HeapQueue <T> .SiftUp(_Buffer, 0, _Count, Comparer); } return(result); }
public void Enqueue(T value) { Grow(1); _Buffer[_Count - 1] = value; HeapQueue <T> .SiftDown(_Buffer, 0, _Count - 1, Comparer); }