/// <summary> /// Returns but does not remove the key-value pair with minimum key /// </summary> /// <returns></returns> public override (K, V) Min() { PositionalList <Item> .Position p = FindMin(); Item item = p.element(); return(item.key, item.value); }
/// <summary> /// Returns but does not remove the key-value pair in front of the Queue /// </summary> /// <returns></returns> public override (K, V) Min() { if (IsEmpty()) { throw new InvalidOperationException("The Priority Queue is empty"); } PositionalList <Item> .Position p = data.First(); Item item = p.element(); return(item.key, item.value); }
/// <summary> /// Adds a new key-value pair /// </summary> /// <param name="key"></param> /// <param name="value"></param> public override void Add(K key, V value) { Item newest = new IPriorityQueue <K, V> .Item(key, value); PositionalList <IPriorityQueue <K, V> .Item> .Position walk = data.Last(); while (walk != null && newest < walk.element()) { walk = data.Before(walk); } if (walk == null) { data.AddFirst(newest); } else { data.AddAfter(walk, newest); } }
/// <summary> /// Returns the position of the minimum key /// </summary> /// <returns></returns> public PositionalList <Item> .Position FindMin() { if (IsEmpty()) { throw new InvalidOperationException("The Priority Queue is empty"); } PositionalList <Item> .Position small = data.First(); PositionalList <Item> .Position walk = data.After(small); while (walk != null) { if (walk.element() < small.element()) { small = walk; } walk = data.After(walk); } return(small); }