zoukankan      html  css  js  c++  java
  • 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(" "); } return 0; }
    非学无以广才,非志无以成学。 正是因为今天的不完美,才对未来充满希望。 ----长帆
  • 相关阅读:
    iOS-导航条
    iOS-存储
    iOS-模型传递
    iOS-日期相关
    iOS-UIViewController
    iOS-loadView方法
    iOS-UIWindow
    Spring 测试
    Spring条件注解@Conditional
    Spring多线程
  • 原文地址:https://www.cnblogs.com/changfan/p/11832132.html
Copyright © 2011-2022 走看看