码迷,mamicode.com
首页 > 编程语言 > 详细

C语言---堆的实现

时间:2019-11-10 22:52:44      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:print   输出   输入   ++   节点   scan   printf   一个   scanf   

问题引入:将下列一系列的给定的数字插入到一个初始为空的小顶堆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; }

 

C语言---堆的实现

标签:print   输出   输入   ++   节点   scan   printf   一个   scanf   

原文地址:https://www.cnblogs.com/changfan/p/11832132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!