【基础数据结构】优先队列:二叉堆

优先队列是一种特殊的数据结构,基于堆的特性实现最高优先级元素优先删除。本文详细介绍了用二叉堆实现优先队列,包括堆的性质、最小值堆的概念,以及插入和删除最小元素的基本操作。通过维护堆序性,确保了高效的操作性能。
摘要由CSDN通过智能技术生成

优先队列

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。

本文章详解优先队列的最基本实现:二叉堆,及其相关操作

正文

由于二叉堆的使用过于普遍,我们会直接称“二叉堆”为“堆”。

  • 堆的结构性质
    堆是一棵完全二叉树
    容易证明,一棵高为h的完全二叉树有2h到2h+1-1个节点,那么完全二叉树的高是 ⌊log n⌋,显然它是O(log N)。
    由于完全二叉树很有规律,所以它可以用数组表示而并非指针。对于数组中的任意位置i,该节点的左儿子在2i上,右儿子在2i+1上(如果它有的话)。

  • 声明

typedef struct HeapStruct
{
 int capacity;	//最大容量
 int size;	//当前堆的大小(体现为数组使用了多少)
 int *elements;	//数组
} *PriorityQueue;
  • 堆序性质
    使操作被快速执行的性质是堆序&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值