编程中如何实现堆的插入和删除操作
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容主要讲解"编程中如何实现堆的插入和删除操作",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"编程中如何实现堆的插入和删除操作"吧!最大堆的插入//向最
千家信息网最后更新 2025年12月03日编程中如何实现堆的插入和删除操作
本篇内容主要讲解"编程中如何实现堆的插入和删除操作",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"编程中如何实现堆的插入和删除操作"吧!
最大堆的插入
//向最大堆中插入元素, heap:存放堆元素的数组 public static void insert(Listheap, int value) { //在数组的尾部添加 if(heap.size()==0) heap.add(0);//数组下标为0的位置不放元素 heap.add(value); //开始上升操作 // heapUp2(heap, heap.size() - 1); heapUp(heap, heap.size() - 1); } //上升,让插入的数和父节点的数值比较,当大于父节点的时候就和父节点的值相交换 public static void heapUp(List heap, int index) { //注意由于数值是从下标为1开始,当index = 1的时候,已经是根节点了 if (index > 1) { //求出父亲的节点 int parent = index / 2; //获取相应位置的数值 int parentValue = (Integer) heap.get(parent); int indexValue = (Integer) heap.get(index); //如果父亲节点比index的数值小,就交换二者的数值 if (parentValue < indexValue) { //交换数值 swap(heap, parent, index); //递归调用 heapUp(heap, parent); } } }
最大堆的删除
/** * 删除堆中位置是index处的节点 * 操作原理是:当删除节点的数值时,原来的位置就会出现一个孔 * 填充这个孔的方法就是,把最后的叶子的值赋给该孔,最后把该叶子删除 * @param heap */ public static void delete(Listheap,int index) { //把最后的一个叶子的数值赋值给index位置 heap.set(index, heap.get(heap.size() - 1)); //下沉操作 //heapDown2(heap, index); heapDown(heap, index); //把最后一个位置的数字删除 heap.remove(heap.size() - 1); } /** * 递归实现 * 删除堆中一个数据的时候,根据堆的性质,应该把相应的位置下移,才能保持住堆性质不变 * @param heap 保持堆元素的数组 * @param index 被删除的那个节点的位置 */ public static void heapDown(List heap, int index) { //因为第一个位置存储的是空值,不在考虑之内 int n = heap.size() - 2; //记录最大的那个儿子节点的位置 int child = -1; //2*index>n说明该节点没有左右儿子节点了,那么就返回 if (2 * index > n) { return; } //如果左右儿子都存在 else if (2 * index < n) { //定义左儿子节点 child = 2 * index; //如果左儿子小于右儿子的数值,取右儿子的下标 if ((Integer) heap.get(child) < (Integer) heap.get(child + 1)) { child++; } }//如果只有一个儿子(左儿子节点) else if (2 * index == n) { child = 2 * index; } if ((Integer) heap.get(child) > (Integer) heap.get(index)) { //交换堆中的child,和index位置的值 swap(heap, child, index); //完成交换后递归调用,继续下降 heapDown(heap, child); } }
到此,相信大家对"编程中如何实现堆的插入和删除操作"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
节点
位置
数值
儿子
元素
数组
编程
下标
叶子
大堆
时候
递归
内容
性质
方法
父亲
学习
实用
更深
最大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
相机数据库文件
数据库系统概论第九章
网络安全策略的设计
数据库考研
越界科技互联网服务平台
现代化软件开发设计规范
app手机应用软件开发
计算机网络技术大赛
不停服务器
语音聊天软件开发多年口碑
企业网络安全证书
服务器数据库405怎么解决
全国革命文物大数据库平台
软件开发大专大专院校有哪些
sql数据库需要每天备份吗
程序员软件开发待遇
学习软件开发的流程
身边的网络安全故事简笔画
网络安全侦查局管辖案件
数据库原理实验指导与习题解析
4g网络技术资料
泽晟软件开发有限公司
没有服务器怎么控制单片机
梦诛服务器搭建
软件开发课学什么
软件和网络安全概念股
lte自组织网络技术分析
软件开发购买
万象2004 数据库修改
做好网络安全保障工作的函