数据结构之堆

本文介绍了数据结构中的堆,包括堆的基本操作,如何删除最小节点并保持堆的性质,以及堆在优先队列和排序中的应用。
摘要由CSDN通过智能技术生成

数据结构之堆(c++)

一、堆的基本操作

   堆(我们这里指二叉堆)是一棵完全二叉树,并且祖先节点的所有子孙节点都不小于(或不大于)祖先节点的值。
通常我们把根节点作为第一层的话,那么深度为h的堆就有2^(h-1)~2^h-1个节点,显然拥有N个节点的堆,其高度为lgN。也就是说对堆进行插入语删除操作我们都需要lgN的时间。由于堆的完全树的性质,因此可以用线性结构(数组)来存储。
首先定义堆的一个类,考虑到常用的树的操作,定义了插入节点操作,删除最小节点操作等操作:还有一点需要注意的是,根据堆的特点(祖先节点不大于/小于子孙节点的值),可将堆分为最大堆和最小堆,在此以最大堆举例
(数据结构与算法分析--C++描述一书中以最小堆为例,在此笔者有个疑问,就是此书作者以vector为存储结构,currentSize表示当前堆中元素个数,在判断是否上溢时,以currentSize==array.size()-1为判断条件(其中array为vector),笔者怀疑作者是否搞反了,因为vector::size()返回的是当前元素个数,好吧,我们继续)
#include<cstdio>
#include<exception>
#define MaxSize 1024
using namespace s
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值