PTA数据结构与算法题目集(中文)  7-5  堆中的路径

7-5 堆中的路径 (25 分)
 

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

输入格式:

每组测试第1行包含2个正整数N和M(≤),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。

输出格式:

对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。

输入样例:

  1. 5 3
  2. 46 23 26 24 10
  3. 5 4 3

输出样例:

  1. 24 23 10
  2. 46 23 10
  3. 26 10
  4. 题目分析:考查最小堆(优先队列)的实现 需要注意的是 利用插入操作建立最小(大)堆 先把数据读入完全二叉树 再调整的方法 可能建成的堆不同 并且他们的时间复杂度也不同(插入操作所需要的时间复杂度为 o(nlogn) 第二种方法的时间复杂度为 线性时间)
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<malloc.h>
  5.  
  6. typedef struct HeapStruct* MinHeap;
  7. struct HeapStruct
  8. {
  9. int Size;
  10. int Capacity;
  11. int* Elements;
  12. };
  13.  
  14. MinHeap CreatMinHeap(int Capacity)
  15. {
  16. MinHeap H;
  17. H = (MinHeap)malloc(sizeof(struct HeapStruct));
  18. H->Capacity = Capacity;
  19. H->Elements = (int*)malloc(H->Capacity * sizeof(int));
  20. H->Size = -;
  21. return H;
  22. }
  23.  
  24. void Insert(MinHeap H, int Element)
  25. {
  26. int i = ++H->Size;
  27. for (; i > && Element < H->Elements[(i - ) / ]; i = (i - ) / )
  28. H->Elements[i] = H->Elements[(i - ) / ];
  29. H->Elements[i] = Element;
  30. }
  31.  
  32. void Delete(MinHeap H)
  33. {
  34. int Tmp = H->Elements[H->Size--];
  35. int Parent;
  36. int Child;
  37. for (Parent=;(Parent*+)<=H->Size;Parent=Child)
  38. {
  39. Child = Parent * + ;
  40. if (Child != H->Size && H->Elements[Child] > H->Elements[Child + ])
  41. Child++;
  42. if (Tmp <= H->Elements[Child])break;
  43. else
  44. H->Elements[Parent] = H->Elements[Child];
  45. }
  46. H->Elements[Parent] = Tmp;
  47. }
  48.  
  49. void PrecDown(MinHeap H,int i)
  50. {
  51. int Tmp = H->Elements[i];
  52. int Parent;
  53. int Child;
  54. for (Parent = i; (Parent * + ) < H->Size; Parent = Child)
  55. {
  56. Child = Parent * + ;
  57. if (Child != H->Size && H->Elements[Child] > H->Elements[Child + ])
  58. Child++;
  59. if (Tmp <= H->Elements[Child])break;
  60. else
  61. H->Elements[Parent] = H->Elements[Child];
  62. }
  63. H->Elements[Parent] = Tmp;
  64. }
  65.  
  66. void BuildHeap(MinHeap H)
  67. {
  68. for (int i = (H->Size - ) / ; i>=; i--)
  69. PrecDown(H, i);
  70. }
  71.  
  72. void Print(MinHeap H,int i)
  73. {
  74. while (i>)
  75. {
  76. printf("%d ", H->Elements[i]);
  77. i = (i - ) / ;
  78. }
  79. printf("%d", H->Elements[]);
  80. }
  81. int main()
  82. {
  83. int N, M;
  84. scanf("%d %d", &N, &M);
  85. MinHeap H = CreatMinHeap(N);
  86. for (int i = ; i < N; i++)
  87. {
  88. int num;
  89. scanf("%d", &num);
  90. Insert(H, num);
  91. }
  92. for (int j = ; j < M; j++)
  93. {
  94. int i;
  95. scanf("%d", &i);
  96. Print(H, i-);
  97. printf("\n");
  98. }
  99. }
  1.  

PTA数据结构与算法题目集(中文) 7-5的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分)   给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义 ...

  2. PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-42整型关键字的散列映射 (25 分) 7-42 整型关键字的散列映射 (25 分)   给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射 ...

  3. PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)

    PTA数据结构与算法题目集(中文)  7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分)   计算机程序设计能力考试(Programming Ability Test,简称P ...

  4. PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)

    PTA数据结构与算法题目集(中文)  7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分)   每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...

  5. PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)

    PTA数据结构与算法题目集(中文)  7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分)   在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...

  6. PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)

    PTA数据结构与算法题目集(中文)  7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分)   胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...

  7. PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)

    PTA数据结构与算法题目集(中文)  7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分)   Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...

  8. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

  9. PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

    PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...

  10. PTA数据结构与算法题目集(中文) 7-34

    PTA数据结构与算法题目集(中文)  7-34 7-34 任务调度的合理性 (25 分)   假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“ ...

随机推荐

  1. 7,MapReduce基础

    目录 MapReduce基础 一.关于MapReduce 二.MapReduce的优缺点 三.MapReduce的执行流程 四.编写MapReduce程序 五.MapReduce的主要执行流程 Map ...

  2. NLP(二十六)限定领域的三元组抽取的一次尝试

      本文将会介绍笔者在2019语言与智能技术竞赛的三元组抽取比赛方面的一次尝试.由于该比赛早已结束,笔者当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集.但是,这并不耽误我们在这 ...

  3. codecs打开不同步给编码的文件

    实例: with codecs.open(file=源文件,mode='命令',encoding='编(解)码方式') as 命名:

  4. 【工具】Intel HLS工具

    目前新版本的Quartus 软件 都自带有  HLS 工具,比如 18.1版本安装以后,HLS相关文件夹如下: HLS工具 也可以单独下载: https://www.intel.com/content ...

  5. 附014.Kubernetes Prometheus+Grafana+EFK+Kibana+Glusterfs整合解决方案

    一 glusterfs存储集群部署 注意:以下为简略步骤,详情参考<附009.Kubernetes永久存储之GlusterFS独立部署>. 1.1 架构示意 略 1.2 相关规划 主机 I ...

  6. oracle --游标详解(转)

    转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定 ...

  7. ijkplayer中遇到的问题汇总

    在做音频播放的时候,很多公司使用的是开源的ijkplayer播放器,ijkplayer底层是基于ffmpeg,在某机型上面可能常常遇到各种问题.今天整理了大家在使用ijkplayer中遇到的问题,以及 ...

  8. Spring bean配置 入门

    Spring 的入门案例:(IOC)  IOC 的底层实现原理(结构图2.01) 图:2.01 IOC:Inversion of Control 控制反转,指的是对象的创建权反转(交给)给Spring ...

  9. Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能

    Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能 开篇 现在的网站基本都有邮件注册功能,毕竟可以通过邮件定期的给用户发送一些 垃圾邮件 精选推荐

  10. 如何简单的将手机投屏在windows上(可在电脑上直接操作手机)

    首先附上要使用的scrcpy源地址 接下来是如何使用(我用的是安卓手机+win10): 下载好后,首先使用数据线连接手机到电脑,并且手机需要打开开发人员选项(不知道如何打开的自行百度): 打开到安装s ...