Exemple #1
0
        public PQNode Insert(string key)
        {
            var node = new PQNode(key);
            ++_currentMaxPriority;
            node.Priority = _currentMaxPriority;
            MinHeapInsert(node);

            return node;
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 public void IncreasePriority(PQNode node)
 {
     ++_currentMaxPriority;
     node.Priority = _currentMaxPriority;
     MinHeapify(node.Index);
 }
Exemple #4
0
 private void MinHeapInsert(PQNode node)
 {
     // A newly inserted node always has the largest priority
     node.Index = _heap.Count;
     _heap.Add(node);
 }