public PQNode Insert(string key) { var node = new PQNode(key); ++_currentMaxPriority; node.Priority = _currentMaxPriority; MinHeapInsert(node); return node; }
public void Remove(PQNode node) { if (_heap.Count == 1) { Reset(); return; } var idx = node.Index; // _heap.IndexOf(node) would be O(n) _heap[idx] = _heap[_heap.Count - 1]; _heap.RemoveAt(_heap.Count - 1); _heap[idx].Index = idx; MinHeapify(idx); }
public void IncreasePriority(PQNode node) { ++_currentMaxPriority; node.Priority = _currentMaxPriority; MinHeapify(node.Index); }
private void MinHeapInsert(PQNode node) { // A newly inserted node always has the largest priority node.Index = _heap.Count; _heap.Add(node); }