加载中...

堆的定义 插入 删除和 哈夫曼树的构造

什么是堆

  • 堆是一种特殊的队列,取出元素的顺序依据元素优先权的大小,而不是进入的先后顺序
  • 堆的结构性:用数组表示的完全二叉树;堆的有序性:任意节点的关键字是其子树中最大的

堆的创建


堆的插入

    public static void Insert(MaxHeap H, ElementType item) {
        int i;
        if (IsFull(H)) {
            System.out.printf("最大堆已满");
            return;
        }
        i = ++H -> Size;//从下往上
        for (; H -> Elements[i / 2] < item; i /= 2) {//如果父节点小,让父节点下来
            H -> Element[i] = H -> Elements[i / 2];
        }
        H -> Element[i] = item;
    }

堆的删除

   public static void Delete(MaxHeap H) {
        int parent, child;
        ElementType Max, tmp;
        if (!isEmpty(H)) {
            System.out.println('删除完毕');
            return;
        }
        Max = H -> Element[1];
        tmp = H -> Element[H -> size--];
        for (parent = 1; parent * 2 <= H -> size; parent = child) {//判断是否有儿子节点
            child = parent * 2;
            if (child != H -> size && H -> Element[child] < H -> Element[child + 1])
                child++;//选大的儿子节点
            if (tmp >= H -> Element[child])
                break;
            else
                H -> Element[parent] = H -> Element[child];//如果儿子节点大,让儿子节点上去
        }
        H -> Element[parent] = tmp;
    }

哈夫曼树的构造

posted @ 2021-09-28 10:52  阿根廷胖头鱼  阅读(112)  评论(0)    收藏  举报