예제 #1
0
        private void Swap(int index1, int index2)
        {
            HeapNode <T> temp = _data[index1];

            _data[index1] = _data[index2];
            _data[index2] = temp;

            if (!_hash.ContainsKey(_data[index1].Key))
            {
                _hash.Add(_data[index1].Key, index1);
            }
            else
            {
                _hash[_data[index1].Key] = index1;
            }

            if (!_hash.ContainsKey(_data[index2].Key))
            {
                _hash.Add(_data[index2].Key, index2);
            }
            else
            {
                _hash[_data[index2].Key] = index2;
            }
        }
예제 #2
0
        public HeapNode <T> ExtractHeapNode()
        {
            if (_data.Count == 0)
            {
                return(null);
            }

            HeapNode <T> min = _data[0];

            _data[0] = _data[_data.Count - 1];
            _data.RemoveAt(_data.Count - 1);

            _hash.Remove(min.Key);

            MinHeapify(0, _data.Count - 1);

            return(min);
        }