原创 2015年11月17日 22:36:23

堆:优先队列(Priority Queue),特殊的队列,取出元素的顺序是按照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。

用完全二叉树来表示堆

从根结点到任意结点路径上结点序列的有序性

类型名称:最大堆(MaxHeap)
数据对象集:完全二叉树,每个结点的元素值不小于其子结点的元素值

typedef struct HNode *Heap;//堆的类型定义
struct HNode{
    ElementType *Data;
    int Size;
    int Capacity;
}; 
typedef Heap MaxHeap;//最大堆
typedef Heap MinHeap;//最小堆

#define MAXDATA 1000;

MaxHeap CreateHeap(int MaxSize)
{
    MaxHeap H = (MaxHeap)malloc(sizeof(struct HNode));
    H->Data = (ElementType *)malloc((MaxSize+1)*sizeof(ElementType));
    H->Size = 0;
    H->Capacity = MaxSize;
    H->Data[0] = MAXDATA;

    return H;
}

bool IsFull(MaxHeap H)
{
    return (H->Size == H->Capacity);
}

bool Insert(MaxHeap H,ElementType X)
{
    int i;

    if(IsFull){
        printf("最大堆已满");
        return false;
    }
    i = ++H->Size;
    for(;H->Data[i/2 < X;i/2])
        H->Data[i] = H->Data[i/2];
    H->Data[i] = X;
    return true;
}

#define ERROR -1

bool IsEmpty(MaxHeap H)
{
    return (H->Size == 0);
}

ElementType DeleteMax(MaxHeap H)
{
    int Parent,Child;
    ElementType MaxItem,X;

    if(IsEmpty(H)){
        printf("最大堆已为空");
        return ERROR;
    }
    MaxItem = H->Data[1];
    X = H->Data[H->Size--];
    for(Parent=1;Parent*2<=H->Size;Parent=Child)
}




















版权声明:本文为博主原创文章,未经博主允许不得转载。

堆、霍夫曼、搜索树

  • 2015年12月21日 20:30
  • 12KB
  • 下载

数据结构 最大堆

  • 2016年05月29日 12:47
  • 5KB
  • 下载

堆排序算法之初始堆建立总结

堆排序算法之初始堆建立总结@(算法学习)关于堆的插入和删除有过一篇思考,但是关于初始堆的构建,没有总结。简单说就下面几个要点(以大顶堆为例): 首先根据序列构建一个完全二叉树 在完全二叉树的基础上,从...

最小堆 实现的霍夫曼编码

  • 2016年12月22日 11:17
  • 6KB
  • 下载

二叉堆(binary heap)

  • 2017年10月06日 22:46
  • 294KB
  • 下载

《算法导论》笔记 第19章 19.2 对二项堆的操作

【笔记】 创建一个  【练习】
  • cyendra
  • cyendra
  • 2014年04月30日 11:34
  • 1010

java堆分析

  • 2015年11月22日 09:52
  • 2.09MB
  • 下载

水标堆车.max

  • 2013年11月26日 14:04
  • 328KB
  • 下载

九、完善堆内系统调用:Linux系统调用、printf的内部实现、malloc的内部实现

系统调用

树堆的实现

  • 2014年10月18日 15:04
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:
举报原因:
原因补充:

(最多只允许输入30个字)