首页 > 其他 > 详细

堆的类实现

时间:2020-12-16 18:57:56      阅读:32      评论:0      收藏:0      [点我收藏+]
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();
    }
};

 

堆的类实现

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!