C语言---堆的实现

问题引入:将下列一系列的给定的数字插入到一个初始为空的小顶堆H[],随后对任意给定的下标i,打印从H[i]到根节点的路径。

#样例输入:

5  3

46 23 26 24 10

5 4 3

#样例输出

24 23 10

46 23 10

26  10

#define MAXN 1001
#define MINH -10001
#include<stdio.h>

int H[MAXN],size;
void Create()
{
    size = 0;
//设置岗哨,便于检测是否超过边界 
    H[0] = MINH;
}
void Insert(int X)
{
    int i;
    for(i=++size;H[i/2]>X;i/=2){
        H[i] = H[i/2];
    }
//返回的得到要插入的位置 
    H[i] = X;
 }
int main(){
    int n,m,i,x,j;
    scanf("%d %d",&n,&m);
    Create();
    for(i=0;i<n;i++){
        scanf("%d",&x);
        Insert(x);
    }
//进行从节点到根的输出
for(i=0;i<m;i++){ scanf("%d",&j); printf("%d",H[j]); while(j>1){ j/=2; printf(" %d ",H[j]); } printf("\n"); } return 0; }

猜你喜欢

转载自www.cnblogs.com/changfan/p/11832132.html