堆原理及其基本应用

本文详细介绍了堆的定义,包括其性质和在数组中的表示。堆的常见操作如上移、下移、插入、删除以及创建堆等进行了阐述,并提供了相应的Pascal代码实现。堆在数据结构中扮演着重要角色,常用于优先队列和排序算法如堆排序。
摘要由CSDN通过智能技术生成

一、堆的定义:

  一个(二叉)堆是一个几乎完全二叉树,它的每个节点都有满足堆的每个特性:如果v和p(v)分别是它的节点和父节点,那么存储在p(v)中的数据项中的键值不小于(或不大于)存储在v中的数据项的键值。

  

堆的数据结构支持以下运算:

   Delete-max[h]:从一个非空的推H中删除最大键值的数据项并将数据项返回。

   Insert[h,x]:插入x到堆中。

   Delete[h,i]:从堆中删除第i项

   Makehaep[A]:将数组A转换成堆

  这个堆的特性蕴含着:沿着每条从根到叶子的路径,元素的健值以非升序排列:
   a.T的根节点存储在H[1]中。
   b.假设T的节点存储在H[j]中,如果它有左子节点,这个子节点存储在H[2j]中,如果它也有右节点,这个子节点存储在H[2j+1]中。
   c.元素H[j]的父节点如果不是根节点,则存储在H[j/2]中。

堆可以看以一棵完全二叉树,它实际上是一个数组H[1..N]。它有如下性质:对于任何索引j,2<=j<=N,

,如下图:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值