小白专场-堆中的路径-c语言实现
发布时间:2020-12-20 10:35:42 所属栏目:Python 来源:网络整理
导读:目录 一、题意理解 二、堆的表示及其操作 三、主程序 更新、更全的《数据结构与算法》的更新网站,更有python、go、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11407287.html 一、题意理解 将一系列给定数字插入一个初始为空的小顶堆H[]。
目录
更新、更全的《数据结构与算法》的更新网站,更有python、go、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11407287.html 一、题意理解将一系列给定数字插入一个初始为空的小顶堆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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |