public void Insert(NodeHeap <T> n)//MAKE PRIVATE. { Int32 i; NodeHeap <T> temp; if (_last >= _capacity - 1) { __Copy(); //Console.WriteLine("Queue is filled"); //return; } this._last = this._last + 1; n.Idx = _last; _cellspace[_last] = n; i = _last; while (i > 1 && (_p(_cellspace[i].Value) < _p(_cellspace[i / 2].Value))) { //Move n up temp = _cellspace[i]; _cellspace[i] = _cellspace[i / 2]; _cellspace[i].Idx = i; _cellspace[i / 2] = temp; _cellspace[i / 2].Idx = i / 2; i = i / 2; } _count = _count + 1; __ComputeH(); }
public void Add(T item) { NodeHeap <T> n = new NodeHeap <T>(); n.Value = item; Insert(n); }
private void __Copy() { NodeHeap <T>[] nb = new NodeHeap <T> [_capacity * 2]; this._capacity *= 2; for (Int32 i = 0; i < _cellspace.Length; i++) { nb[i] = _cellspace[i]; } _cellspace = nb; }
public Node <T> RightSibling(Node <T> node) { NodeHeap <T> np = node as NodeHeap <T>; if (np == null || np.Idx == 1 || np.Idx + 1 > _last) { return(null); } return(_cellspace[np.Idx + 1]); }
public Node <T> LeftMostChild(Node <T> node) { NodeHeap <T> np = node as NodeHeap <T>; if (np == null || np.Idx * 2 > _last) { return(null); } return(_cellspace[np.Idx * 2]); }
public Node <T> Parent(Node <T> node) { NodeHeap <T> np = node as NodeHeap <T>; if (np == null || np.Idx == 1) { return(null); } return(_cellspace[np.Idx / 2]); }