• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C/C++
  • 标签: c++  最小堆  

资源简介

c++ 最小堆 还不错 标准库没有 自己做作业用。

资源截图

代码片段和文件信息

template   
class MinHeap {   
public:   
    MinHeap(int MinHeapSize = 10);   
    ~MinHeap() {delete [] heap;}   
    int Size() const {return CurrentSize;}   
    T Min() {if (CurrentSize == 0)   
              throw OutOfBounds();   
           return heap[1];}   
    MinHeap& Insert(const T& x);   
    MinHeap& DeleteMin(T& x);   
    void Initialize(T a[] int size int ArraySize);   
    void Deactivate() {heap = 0;}   
    void Output() const;   
private:   
    int CurrentSize MaxSize;   
    T *heap;   
};   
  
template   
MinHeap::MinHeap(int MinHeapSize)   
{   
    MaxSize = MinHeapSize;   
    heap = new T[MaxSize+1];   
    CurrentSize = 0;   
}   
  
template   
MinHeap& MinHeap::Insert(const T& x)   
{   
    if (CurrentSize == MaxSize)   
        throw NoMem();   
  
    //为x寻找应插入的位置   
    //i从新的叶节点开始,并沿着树上升   
    int i = ++CurrentSize;   
    while (i != 1 && x < heap[i/2])    
    {   
        heap[i] = heap[i/2]; // 将元素下移   
        i /= 2;              // 移向父节点   
    }   
    heap[i] = x;   
  
    return *this;   
}   
  
template   
MinHeap& MinHeap::DeleteMin(T& x)   
{   
    if (CurrentSize == 0)   
        throw OutOfBounds();   
  
    x = heap[1];   
  
    T y = heap[CurrentSize--]; //最后一个元素   
  
    // 从根开始 为y寻找合适的位置   
    int i = 1  // 堆的当前节点   
       ci = 2;  // i的子节点   
  
    while (ci <= CurrentSize)    

评论

共有 条评论