二叉堆

二叉堆的基本操作

数据结构表示:

       使用一个一维数组表示,下标从1开始计算,如果是C/C++语言,则忽略下标为0的元素。使用n表示队中元素的个数。

堆的两个基本操作:

      堆关键是理解两个基本操作的实现:

      1、 向堆插入一个结点(上升操作):

             在堆尾(a[n])插入一个元素,然后不断和父节点(a[i/2])比较,如果比父结点大(大根堆)或小(小根堆)就交换,一直到

       堆顶或不再交换就结束。

       C语言代码:

void push_heap(int a[],int n){
    int i = n;
    int x = a[n];
    while(i > 1 && a[i/2] < x){
        a[i] = a[i/2];
        i /= 2;
    }
    a[i] = x;
}

(以上代码是大根堆的上升操作,小根堆只需将a[i]>a[j]改为a[i]<a[j]即可)
   具体使用时,先在一维数组后面加入元素,然后调用push_heap函数进行调整。如下面的代码:

++n;
a[n]=x;
push_heap(a,n);

       2、删除节点:

     删除堆顶节点(下降操作):

     将堆顶节点()

点赞