码迷,mamicode.com
首页 > 其他好文 > 详细

堆的类实现

时间:2020-12-21 11:58:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:span   rgb   tor   cto   swap   开始   索引   top   填充   

template <class T>
class heap {

    vector<T>data;

public:
    heap() {}
    heap(T *a,int len) {
        for (int i = 0; i < len; i++)
            data.push(a[i]);
    }

    T top() {
        return data.front();
    }
    //为了方便操作,索引从1开始,所以为了完全填充数组,查询时偏移一位
    void push(T x) {
        data.emplace_back(x);
        int now = data.size();
        while (now > 1) {
            if (data[now - 1] < data[(now >> 1) - 1])
                swap(data[now - 1], data[(now >> 1) - 1]);
    
            now >>= 1;
        }

    }

    void pop() {
        data.front() = data.back();
        int len = data.size() - 1;
        int now = 2;
        while (now <=len) {
            if (data[now] < data[now - 1])now++;
            if (data[now - 1] < data[(now >> 1) - 1]) {
                swap(data[now - 1], data[(now >> 1) - 1]);
                now <<= 1;
            }
            else break;

        }
        data.pop_back();
    }

    int size() {
        return data.size();
    }
};

 

堆的类实现

标签:span   rgb   tor   cto   swap   开始   索引   top   填充   

原文地址:https://www.cnblogs.com/komet/p/14144304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!