编程中如何实现堆的插入和删除操作
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,本篇内容主要讲解"编程中如何实现堆的插入和删除操作",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"编程中如何实现堆的插入和删除操作"吧!最大堆的插入//向最
千家信息网最后更新 2025年02月07日编程中如何实现堆的插入和删除操作
本篇内容主要讲解"编程中如何实现堆的插入和删除操作",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"编程中如何实现堆的插入和删除操作"吧!
最大堆的插入
//向最大堆中插入元素, 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安全错误
数据库的锁怎样保障安全
网络安全管控主体
人脸对比服务器
失落的方舟什么服务器好
山东邮件营销外贸软件开发公司
网络安全工作 审计
中国邮政集团软件开发中心笔试
数据库info是什么意思
古交软件开发加盟
局域网电脑做服务器
保定市网络安全和信息化编制
清朗429首都网络安全日答题
软件开发培训视频教学
什么云服务器好用又安全
广东全速网络技术有限公司
合肥软件开发公司推荐
mac 上连接服务器工具
网络安全主题班会活动流程
广告管理发布软件开发
用友nc数据库表
北理工数据库技术与应用机考
计算机网络技术通信技术
河北程序软件开发价格如何计算
数据库质疑解决办法
十大网络安全公司排名拓
马云说互联网科技创新
ei数据库修改论文信息
数据库每个表的字段导出
dnf台服数据库在哪里
什么公司有实力生产服务器
网络安全综合设计方案