当前位置: 首页 > news >正文

【PTA数据结构 | C语言版】多叉堆的上下调整

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

    • 题目
    • 代码

题目

请编写程序,将 n 个已经满足 d 叉最小堆顺序约束的数据直接读入最小堆;随后将下一个读入的数据 x 插入堆;再执行删顶操作并输出删顶的元素;最后顺次输出堆中剩余元素以检验操作的正确性。

输入格式:
输入在第 1 行给出 2 个正整数 c(2<c≤1000)和 d(1<d≤4),依次对应最小堆的最大容量和树的度;下一行给出正整数 n(<c);随后一行按层序遍历的顺序给出 n 个最小堆元素;最后一行给出将要插入堆的元素 x。所有堆元素均为 int 型范围内的整数。

输出格式:
在一行中输出插入后再删顶的元素,格式为 min = y,其中 y 为删顶元素值。
随后 n 行,按层序遍历的顺序每行输出一个最小堆元素。

输入样例:
10 3
9
1 3 4 6 7 10 8 5 9
2

输出样例:
min = 1
2
3
4
6
7
10
8
5
9

代码

#include <stdio.h>
#include <stdlib.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}// 向上调整,维护d叉最小堆性质
void siftUp(int arr[], int n, int d, int i) {while (i > 0) {int parent = (i - 1) / d;if (arr[i] >= arr[parent]) break;swap(&arr[i], &arr[parent]);i = parent;}
}// 向下调整,维护d叉最小堆性质
void siftDown(int arr[], int n, int d, int i) {while (1) {int smallest = i;int startChild = d * i + 1;int endChild = startChild + d;for (int j = startChild; j < endChild && j < n; j++) {if (arr[j] < arr[smallest]) {smallest = j;}}if (smallest == i) break;swap(&arr[i], &arr[smallest]);i = smallest;}
}int main() {int c, d, n;scanf("%d %d", &c, &d);scanf("%d", &n);int *heap = (int *)malloc(c * sizeof(int));if (heap == NULL) {fprintf(stderr, "内存分配失败\n");return 1;}for (int i = 0; i < n; i++) {scanf("%d", &heap[i]);}int x;scanf("%d", &x);// 插入新元素heap[n] = x;siftUp(heap, n + 1, d, n);n++;// 删顶操作int min = heap[0];heap[0] = heap[n - 1];n--;siftDown(heap, n, d, 0);// 输出结果printf("min = %d\n", min);for (int i = 0; i < n; i++) {printf("%d\n", heap[i]);}return 0;
}    
http://www.lryc.cn/news/591989.html

相关文章:

  • Python MP3 归一化器和长度分割器实用工具开发指南
  • SQL映射文件
  • Android 应用保活思路
  • 树(Tree)
  • 【C++基础】--多态
  • web域名解析
  • 信息论至AI实践:交叉熵的原理全景与应用深度解析
  • Github库镜像到本地私有Gitlab服务器
  • 您的企业需要服务台经理吗?-ManageEngine卓豪
  • 《5分钟开发订单微服务!飞算JavaAI实战:IDEA插件安装→空指针修复→K8s部署全流程》
  • 3C电子产品蓝光三维扫描检测方案-中科米堆CASAIM
  • 机器视觉的布料丝印应用
  • Duckdb处理excel文件
  • 【实战】一次出口连接数超限事故引发的架构反思:强制代理、NAT 网关与大厂最佳实践
  • Python网络爬虫实现selenium对百度识图二次开发以及批量保存Excel
  • LangChain 源码剖析(七)RunnableBindingBase 深度剖析:给 Runnable“穿衣服“ 的装饰器架构
  • Yoga Air 32,Yoga Air 32,Yoga AIO 9 32IRH8(F0HH,F0HJ)一体机电脑原厂Win11系统镜像
  • 服务攻防-Java组件安全FastJson高版本JNDI不出网C3P0编码绕WAF写入文件CI链
  • AI产品经理面试宝典第36天:AI+旅游以及行业痛点相关面试题的指导
  • sql注入以及Python二分查找
  • 创建型模式
  • MinIO 分布式文件系统
  • 第二篇 html5和css3开发基础与应用
  • 【论文阅读】BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework
  • poi-excel-添加水印
  • 20250718【顺着234回文链表做两题反转】Leetcodehot100之20692【直接过12明天吧】今天计划
  • Vue导出Html为Word中包含图片在Microsoft Word显示异常问题
  • Excel批量生成SQL语句 Excel批量生成SQL脚本 Excel拼接sql
  • FastExcel:革新Java生态的高性能Excel处理引擎
  • 2.3 前端-ts的接口以及自定义类型