public void Delete(PriorityNode <T> node)
        {
            int i    = elements.IndexOf(node);
            int last = elements.Count - 1;

            elements[i] = elements[last];
            elements.RemoveAt(last);
            Heapify();
        }
 public PriorityNode <T> PopMin()
 {
     if (elements.Count > 0)
     {
         PriorityNode <T> item = elements[0];
         Delete(item);
         return(item);
     }
     ////relook at this - should we just throw exception?
     return(null);
 }
        public void Heapify()
        {
            for (int i = elements.Count - 1; i > 0; i--)
            {
                int parentPosition = (i + 1) / 2 - 1;
                parentPosition = parentPosition >= 0 ? parentPosition : 0;

                if (elements[parentPosition].prioridad > (elements[i].prioridad))
                {
                    PriorityNode <T> tmp = elements[parentPosition];
                    elements[parentPosition] = elements[i];
                    elements[i] = tmp;
                }
            }
        }
 public PriorityQueue()
 {
     cola      = new PriorityNode <T>();
     cola.Next = null;
 }
        public PriorityNode <T> GetMin()
        {
            PriorityNode <T> min = elements[0];

            return(min);
        }
 public void Add(PriorityNode <T> node)
 {
     elements.Add(node);
     Heapify();
 }