栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现数据结构-堆

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现数据结构-堆

堆是一个完全二叉树,其中每个节点的值总是大于等于子节点的值。一般来说,我们用一个数组而不是用指针建立一个树。这是由于堆是完全二叉树,当数组表示时,位置i 的节点的父节点位置一定为i/2,而它的两个子节点的位置又一定分别为2i 和2i+1,因此可以很方便的进行上浮和下沉操作。

                                                         图1  堆(最大堆)

基于此,实现的代码如下:

public class Heap> {
    List heap = new ArrayList<>();

    public E top(){
        return heap.get(0);
    }

    public void push(E k){
        heap.add(k);
        swim(heap.size()-1);
    }

    //最后一个数挪到开头,然后下沉
    public void pop(){
        heap.set(0,heap.remove(heap.size()-1));
        sink(0);
    }

    //上浮
    public void  swim(int pos){
        while(pos>=1 && heap.get(pos/2).compareTo(heap.get(pos))<0){
            swap(pos/2,pos);
            pos = pos/2;
        }
    }

    //下沉
    public void sink(int pos){
        int N = heap.size()-1;
        while(2*pos<=N){
            int i = 2*pos;
            if(i=0) break;
            swap(pos,i);
            pos = i;
        }
    }

    private void swap(int i,int j){
        if(i==j) return;
        E temp = heap.get(i);
        heap.set(i,heap.get(j));
        heap.set(j,temp);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号