目录一、题意理解二、堆的表示及其操作三、主程序一、题意理解将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入样例:5(结点树) 3(i的个数)46 23 26 24 10...

目录
- 一、题意理解
- 二、堆的表示及其操作
- 三、主程序
一、题意理解
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。
输入样例:
5(结点树) 3(i的个数)
46 23 26 24 10 -》结点数据
5 4 3 -》i值
通过上述样例,我们可以得到下图所示的树结构:
通过观察该树,我们可以看到输出样例:
24 23 10
46 23 10
26 10
二、堆的表示及其操作
/* c语言实现 */ #define MAXN 1001 #define MINH -10001 int H[MAXN], size; void Create() { size = 0; H[0] = MINH; // 设置岗哨 } void Insert(int X) { // 将X插入H。这里省略检查堆是否已满的代码 int i; for (i = ++size; H[i/2] > X; i /= 2) H[i] = H[i/2]; H[i] = X; }
三、主程序
/* c语言实现 */ int main() { 读入n和m; 根据输入序列建堆; 对m个要求:打印到根的路劲; return 0; } int main() { int n, m, x, i, 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语言实现


基础教程推荐
猜你喜欢
- C++实现ETW进行进程变动监控详解 2023-05-15
- 带你深度走入C语言取整以及4种函数 2022-09-17
- [c语言-函数]不定量参数 2023-09-08
- [C语言]二叉搜索树 2023-09-07
- centos 7 vscode cmake 编译c++工程 2023-09-17
- C语言编程C++旋转字符操作串示例详解 2022-11-20
- C语言 详解字符串基础 2023-03-27
- C语言实现宾馆管理系统课程设计 2023-03-13
- C++实战之二进制数据处理与封装 2023-05-29
- 全面了解C语言 static 关键字 2023-03-26