堆--学习记录

此处默认二叉大根堆

描述:一棵树,完全二叉(i的左孩子为2i,右为2i+1),对于每个节点,它的孩子键值小于它,优先队列就是用堆实现的 

性质:1.树根为最大点(堆顶),故不断重复 取顶→删顶就能得到排序序列(堆排序)

             2.此结构决定了不能在里面找任意元素(数组实现不服)或者迭代,(所以stl的优先队列不能用这俩操作)


操作:1.基础操作:节点的上浮与下沉:

                 上浮:一个节点,若其父亲小于它,交换它和它父亲,重复执行

                 下沉:一个节点,若其孩子大于它,交换它和它的值大的儿子,重复执行

声明“最后一个节点”:最下层最右边那个节点

           2.插入节点:把这个点作为最后一个节点插入,然后对他进行上浮

           3.删除节点:把最后一个节点的值赋到这个节点上并删除最后那个节点,然后下沉(问题又回到了怎么找这个节点上

           4.对一个数组建堆:将此数组看做数组实现的堆,从后向前一个个执行上浮的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值