堆中的路径(MOOC)
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。
输入格式:
每组测试第1行包含2个正整数N和M(≤),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。
输出格式:
对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。
输入样例:
5 3
46 23 26 24 10
5 4 3
输出样例:
24 23 10思路:二叉堆的基本构建过程,打印从H[i]到根结点路径用一个for 循环for(;index>0;index/=2)即可打印输出。
46 23 10
26 10
本题主要训练二叉堆的构建,用struct 结构体构建Heap的结构。
#include<stdio.h>
#include<stdlib.h>
typedef struct HNode *Heap;
struct HNode{
int *data;
int size;
int capacity;
}; typedef Heap MinHeap; //最小堆 MinHeap createHeap(int size){ //创建一个二叉堆
MinHeap H=(MinHeap)malloc(sizeof(struct HNode));
H->data=(int*)malloc((size+)*sizeof(int));
H->size=;
H->capacity=size;
H->data[]=-;
return H;
}
bool isFull(MinHeap H){
return (H->size==H->capacity);
}
void insert(MinHeap H,int v){ //将输入的V值加入最小堆中,并不断调整
int i;
if(isFull(H))return;
i=++H->size;
for(;H->data[i/]>v;i/=)
H->data[i]=H->data[i/];
H->data[i]=v;
}
MinHeap BuildHeap(int n){ //构建堆,先创建堆,再将数据不断加入队中并调整
MinHeap H=createHeap(n);
int v;
for(int i=;i<n;i++){
scanf("%d",&v);
insert(H,v); }
return H;
}
void Traverse(MinHeap H,int index){
int flag=;
for(;index>;index/=){
if(flag++)printf(" ");
printf("%d",H->data[index]);
}
}
int main(){
int n,m;
Heap H;
scanf("%d %d",&n,&m);
H=BuildHeap(n);
int index;
for(int i=;i<m;i++){
scanf("%d",&index);
Traverse(H,index);
printf("\n");
}
return ;
}
堆中的路径(MOOC)的更多相关文章
- 堆中的路径 【Heap】
7-2 堆中的路径(25 分) 将一系列给定数字插入一个初始为空的小顶堆H[].随后对任意给定的下标i,打印从H[i]到根结点的路径. 输入格式: 每组测试第1行包含2个正整数N和M(≤1000),分 ...
- PTA 05-树7 堆中的路径 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/713 5-5 堆中的路径 (25分) 将一系列给定数字插入一个初始为空的小顶堆H[] ...
- 浙大PTA - - 堆中的路径
题目链接:https://pta.patest.cn/pta/test/1342/exam/4/question/21731 本题即考察最小堆的基本操作: #include "iostrea ...
- 小白专场-堆中的路径-c语言实现
目录 一.题意理解 二.堆的表示及其操作 三.主程序 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/ ...
- pta 编程题12 堆中的路径
其它pta数据结构编程题请参见:pta 这道题考察的是最小堆. 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1. 插入元素 ...
- 小白专场-堆中的路径-python语言实现
目录 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11407287.h ...
- jvm之java类加载机制和类加载器(ClassLoader),方法区结构,堆中实例对象结构的详解
一.类加载或类初始化:当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载.连接.初始化3个步骤来对该类进行初始化.如果没有意外,JVM将会连续完成3个步骤. 二.类加载时机: 1 ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- 【04-10】java中的路径
java中的路径 System.getProperty("user.dir") 获取工程的绝对路径 Class.class.getClass().getResource(&quo ...
随机推荐
- Tomcat 安装APR的有关问题
Tomcat 安装APR的问题APR.APR-util.APR-iconv安装都正常apr安装命令:./configuremakemake install apr-util./configure -- ...
- Spring coud微服务框架具体实现关键说明
搭建一个微服务,考虑的问题涉及到运维,数据管理,性能,并发等方方面面.项目中使用Spring coud 搭建微服务,从技术选型,到技术实现都要全方面考虑服务化的问题.下面简单总结下搭建过程用的技术说明 ...
- 分布式消息通信ActiveMQ
消息中间件 消息中间件是指利用高效可靠的消息传递机制进行平台无关的数据交流,并且基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信. 消息中间件能 ...
- from表单提交之前数据判空
在input标签中写onclick事件,不管返回是真是假都会继续提交表单. 使用onsubmit事件 <form action="login.html" method='po ...
- oracle 11GR2 单机打补丁PSU 11.2.0.4.180717
上传补丁包,修改权限 su - oracle mdir /tmp/psu mv p6880880_112319_Linux-x86-64.zip /tmp/psu/mv databasepsu1807 ...
- vue-cli3 使用mint-ui
关于vue-cli3.x按需引入mint-ui问题记录: 按需引入 借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的. 首先,安装 babel-p ...
- Python中级 —— 06SMTP发送电子邮件
Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务.(未完)
- helpera64开机bootlogo-BUG
环境: HelperA64开发板 Linux3.10内核 时间:2019.01.12 目标:修改开机bootlogo的BUG 问题: 1.24bit深度的bootlogo.bmp图片会导致Qt5有色差 ...
- u-boot-1.1.6第1阶段分析之make smdk2410_config指令
uboot源码中的README文档中介绍要使用uboot必须先进行配置后编译,即先执行make xxx_config命令,然后执行make命令,下面以make smdk2410_config指令为例来 ...
- 数构与算法 | 什么是大 O 表示算法时间复杂度
正文: 开篇我们先思考这么一个问题:一台老式的 CPU 的计算机运行 O(n) 的程序,和一台速度提高的新式 CPU 的计算机运 O(n2) 的程序.谁的程运行效率高呢? 答案是前者优于后者.为什么呢 ...