数据结构 堆。

来源:互联网 发布:mac优化大师 编辑:程序博客网 时间:2024/06/09 17:06

 删除优先级最高的元素 DeleteMin()

 

void down(int bab){    int son=bab*2;    int a=heap[bab];    while(son<=hlength)    {        if(son<length&&heap[son]>heap[son+1])            son++;       //确定最小的儿子                if(heap[son]>a)              break;        else         {            heap[bab]=heap[son];            bab=son;            son=bab*2;        }    }    heap[son]=a;}int DeleteMin(){    int r=heap[1]; //delete root    heap[1]=heap[hlength--];    down(1);    return r;}


在堆中插入新元素 Insert()

 

void up(int son){    int bab=son/2;    int a=heap[son];        while(bab>1&&a<heap[bab])    {        heap[son]=heap[bab];        son=bab;        bab=son/2;    }    heap[bab]=a;    return ;}void Insert(int a){    heap[++hlength]=a;  //加长并将a添加到末尾    up(hlength);}

 

 

 

将X位置的优先级提升到p值

void IncreasKey(int x,int p)  //将x的优先级提升到p{    if(heap[x]<p) // 如果成立 优先级本身就高        return ;    heap[x]=p;    up(x);}

建模

void build (){   for(int i=hlength/2;i>0;i--)    down(i);  //调整每一次}


 

 

 

 

0 0