参考书籍《数据结构与算法分析——C语言描述》
关于堆的一些基本概念,可参见小zz的另一篇博文。
/*本例程实现的是最小堆,最大堆类似*/
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
#define MAX 13
typedef struct BHeap
{
    int Capacity;//堆的最大容量
    int Size;//当前堆大小
    int *bh;//堆的数组实现
}BHeap,*BH;
BH Init_BH(int Max);//堆的初始化
bool IsFull(BH H);//判断堆是否满
void Insert(int data,BH H);//插入操作
int DeletMin(BH H);//删除最小元
bool IsEmpty(BH H);//判断是否是空
void PrintHeap(BH H);
int main()
{
    int i=0;
    int data[11]={0,14,19,26,65,32,31,21,68,16,13};
    BH Heap;
    Heap=Init_BH(MAX);
    for(i=1;i<=10;i++)
    {
        Insert(data[i],Heap);
    }
    PrintHeap(Heap);
    DeletMin(Heap);
    PrintHeap(Heap);
    return 0;
}
BH Init_BH(int Max)
{
    BH H;
    H=malloc(sizeof(BHeap));
    if(H==NULL)
        printf("Out of space!\n");
    H->bh=malloc(sizeof(int)*(Max+1));
    memset(H->bh,0,sizeof(int)*(Max+1));
    if(H->bh==NULL)
        printf("Out of space!\n");
    H->Capacity=Max;
    H->Size=0;
    H->bh[0]=0;
    return H;
}
bool IsFull(BH H)
{
    if(H->Capacity==H->Size)
        return true;//已满
    else return false;//未满
}
void Insert(int data,BH H)
{
    int i;
    if(IsFull(H))
    {
        printf("Binary Heap is full!\n");
        return;
    }
    for(i=++H->Size;H->bh[i/2]>data;i=i/2)//上滤
    {
            H->bh[i]=H->bh[i/2];
    }
    H->bh[i]=data;
}
bool IsEmpty(BH H)
{
    if(H->Size==0)
        return true;//空堆
    else return false;
}
int DeletMin(BH H)
{
    int i,Child;
    int Min,Last;
    if(IsEmpty(H))
    {
        printf("Heap is empty!\n");
        return H->bh[0];
    }
    Min=H->bh[1];
    Last=H->bh[H->Size--];
    for(i=1;i*2<=H->Size;i=Child)
    {
        Child=i*2;//左儿子
        if((Child<H->Size)&&(H->bh[Child]>H->bh[Child+1]))
            Child++;
        if(Last>H->bh[Child])
            H->bh[i]=H->bh[Child];
        else
            break;
    }
    H->bh[i]=Last;
    return Min;
}
void PrintHeap(BH H)
{
    int i=0;
    for(i=1;i<=H->Size;i++)
    {
        printf("%d\t",H->bh[i]);
    }
}
原文:http://blog.csdn.net/u010275850/article/details/45065195