/// <summary> /// 将一个数组构造成堆 /// </summary> /// <param name="array">需要构造成堆得数组</param> public Heap(HeapElement[] array) { m_heap = new List<HeapElement>(); m_heap.AddRange(array); m_count = array.Length; initHeap(); }
/// <summary> /// 向堆中添加新的元素 /// </summary> /// <param name="e"></param> public void addElement(HeapElement e) { e.heapLoc = m_count; m_heap.Add(e); m_count++; upAdjust(m_count - 1); }
public override int CompareTo(HeapElement a) { if (!(a is SearchNode)) throw new ArgumentException("a is not SearchNode!"); SearchNode cpNode=(SearchNode)a; if (acPr > cpNode.acPr) return 1; else if (acPr == cpNode.acPr) return 0; else return -1; }
/// <summary> /// 必须实现的比较函数 /// </summary> /// <param name="a"></param> /// <returns>小于返回负值,等于返回零大于,返回正值</returns> public abstract int CompareTo(HeapElement a);
/// <summary> /// 改变堆中一个元素的值,并保持堆得结构不变 /// </summary> /// <param name="index">元素位置索引</param> /// <param name="newValue">新的值</param> public void changeValue(int index, HeapElement newValue) { m_heap[index] = newValue; upAdjust(index); downAdjust(index); }