堆的原理及其完全二叉树代码实现

本文介绍了优先队列的概念,它是一种根据元素优先权而非入队顺序进行操作的数据结构。堆是一种常用的实现优先队列的方式,其中完全二叉树是堆的典型表示。通过一维数组来表示完全二叉树,可以动态维护优先度最高的元素(即树根)。文章还将展示使用C#实现堆的代码示例。
摘要由CSDN通过智能技术生成

优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是 依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。
如何用一种数据结构来组织堆:完全二叉树,树根就是此时数据优先度最高的,随着数据的插入删除,优先度最高的树根也在动态变化。
完全二叉树的表示:一维数组,其中arr[0]为哨兵元素。

typedef struct HeapStruct *MaxHeap; 
struct HeapStruct {
	 ElementType *Elements; /* 存储堆元素的数组 */
	 int Size;
	int Capacity; 
};
MaxHeap Create( int MaxSize ) {
/* 创建容量为MaxSize的空的最大堆 */
	MaxHeap H = malloc( sizeof( struct HeapStruct ) ); 
	H->Elements = malloc( (MaxSize+1) * sizeof(ElementType)); 
	H->Size = 0;
	H->Capacity = MaxSize;
	H->Elements[0] = MaxData; 
	/* 定义“哨兵”为大于堆中所有可能元素的值,便于以后更快操作 */
	return H; 
}
//最大堆的插入
void Insert( MaxHeap H, ElementType item ) { 
/* 将元素item 插入最大堆H,其中H->Elements[0]已经定义为哨兵 */ 
	if ( IsFull(H) ) { 
		printf("最大堆已满");
		return;
	}
	H->Elements[++size] = item;
	int i;
	for(i=size;i>0;i/=2)//上滤交
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值