Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
 /// <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);
 }