二叉堆的基本操作
数据结构表示:
使用一个一维数组表示,下标从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、删除节点:
删除堆顶节点(下降操作):
将堆顶节点()