二叉堆的两个重要性质:

1、结构性,为完全二叉树,可以用数组方便地表示。2、堆序性:树中每个节点的关键字值大于或等于其父节点的关键字值。

二叉堆的数据结构声明如下:

 struct HeapStruct;
typedef struct HeapStruct *PriorityQueue; PriorityQueue Initialize(int MaxElements);
void Destroy(PriorityQueue H);
void MakeEmpty(PriorityQueue H);
void Insert(ElementType X, PriorityQueue H);
ElementType FindMin(PriorityQueue H);
ElementType DeleteMin(PriorityQueue H);
int isEmpty(PriorityQueue H);
int isFull(PriorityQueue H); struct HeapStruct{
int Capacity;
int size;
ElementType *Elements;
};

初始化函数代码如下:

 PriorityQueue Initialize(int MaxElements){
PriorityQueue H; H = malloc(sizeof(HeapStruct));
H->Elements = malloc((MaxElements+)*sizeof(ElementType)); H->Capacity = MaxElements;
H->size = ;
return H;
}

Insert函数实现代码如下:

 void Insert(ElementType X, PriorityQueue H){
int i; if(isFull(H)){
printf("Heap is full\n");
return;
}
for(i=++H->size; i> && H->Elements[i/] > X; i /=)
H->Elements[i] = H->Elements[i/]; H->Elements[i] = X;
}

DeleteMin函数实现代码如下:

 ElementType DeleteMin(PriorityQueue H){
int i, Child;
ElementType MinElement, LastElement; if(isEmpty(H)){
printf("Priority queue is empty\n");
return MinData; //无意义的堆中比最小值还小的值
} MinElement = H->Elements[];
LastElement = H->Elements[H->size--]; for(i=; i*<=H->size; i=Child){
Child = i*;
if(Child != H->Size && H->Elements[Child + ] < H->Elements[Child])
Child++;
if(LastElement > H->Elements[Child])
H->Elements[i] = H->Elements[Child];
else
break;
}
H->Elements[i] = LastElement;
return MinElement;
}

优先队列的一种实现--堆ADT的更多相关文章

  1. 优先队列PriorityQueue实现 大小根堆 解决top k 问题

    转载:https://www.cnblogs.com/lifegoesonitself/p/3391741.html PriorityQueue是从JDK1.5开始提供的新的数据结构接口,它是一种基于 ...

  2. Black Box--[优先队列 、最大堆最小堆的应用]

    Description Our Black Box represents a primitive database. It can save an integer array and has a sp ...

  3. 两种建立堆的方法HeapInsert & Heapify

    参考 堆排序中两种建堆方法的比较 第一种方法HeapInsert 它可以假定我们事先不知道有多少个元素,通过不断往堆里面插入元素进行调整来构建堆. 它的大致步骤如下: 首先增加堆的长度,在最末尾的地方 ...

  4. 优先队列Priority Queue和堆Heap

    对COMP20003中的Priority queue部分进行总结.图片来自于COMP20003 queue队列,顾名思义特点先进先出 priority queue优先队列,出来的顺序按照优先级prio ...

  5. 堆,set,优先队列

    当我们需要高效的完成以下操作时: 1.插入一个元素 2.取得最小(最大)的数值,并且删除 能够完成这种操作的数据结构叫做优先队列 而能够使用二叉树,完成这种操作的数据结构叫做堆(二叉堆) 堆与优先队列 ...

  6. 【ZZ】堆和堆的应用:堆排序和优先队列

    堆和堆的应用:堆排序和优先队列 https://mp.weixin.qq.com/s/dM8IHEN95IvzQaUKH5zVXw 堆和堆的应用:堆排序和优先队列 2018-02-27 算法与数据结构 ...

  7. 结构之美——优先队列基本结构(四)——二叉堆、d堆、左式堆、斜堆

    实现优先队列结构主要是通过堆完成,主要有:二叉堆.d堆.左式堆.斜堆.二项堆.斐波那契堆.pairing 堆等. 1. 二叉堆 1.1. 定义 完全二叉树,根最小. 存储时使用层序. 1.2. 操作 ...

  8. 优先队列(堆) -数据结构(C语言实现)

    数据结构与算法分析 优先队列 模型 Insert(插入) == Enqueue(入队) DeleteMin(删除最小者) == Dequeue(出队) 基本实现 简单链表:在表头插入,并遍历该链表以删 ...

  9. 优先队列实现 大小根堆 解决top k 问题

      摘于:http://my.oschina.net/leejun2005/blog/135085 目录:[ - ] 1.认识 PriorityQueue 2.应用:求 Top K 大/小 的元素 3 ...

随机推荐

  1. node auto run / node 自动运行

    http://stackoverflow.com/questions/20445599/auto-start-node-js-server-on-boot http://stackoverflow.c ...

  2. 20155238 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    实验内容 使用JDK编译.运行简单的Java程序. 使用Eclipse 编辑.编译.运行.调试Java程序. 实现学生成绩管理功能,并进行测试. 实验步骤及结果 (一)命令行下Java程序开发 编译运 ...

  3. UVA10559 Blocks

    玄学东西,毒瘤状态,死也想不出 设f[l][r][i]表示[l,r]区间,右边再加上i个颜色和r颜色相同的块,消掉这些的最大收益 两种转移方式: 把r和后面i个一起销毁,\(f[l][r-1][0]+ ...

  4. Android中使用MediaCodec硬件解码,高效率得到YUV格式帧,快速保存JPEG图片(不使用OpenGL)(附Demo)

    MediaCodec的使用demo: https://github.com/vecio/MediaCodecDemo https://github.com/taehwandev/MediaCodecE ...

  5. 2018年美国大学生数学建模竞赛(MCM/ICM) 比赛心得

    话不多说,题目先上: 这是我们这次选择的题目,说说建模的那些事! 美赛的时间和国赛挑战杯时间略有不同,貌似多的一天是为了让我们对文章进行一个翻译吧QAQ 建议参加美赛的同学可以参照此计划进行 Day0 ...

  6. [PLC]ST语言六:DI/EI/FEND/WDT/FOR/NEXT

    一:DI/EI/FEND/WDT/FOR/NEXT 说明:简单的顺控指令不做其他说明. 控制要求:无 编程梯形图: 结构化编程ST语言:

  7. hdu1754 I Hate It(线段树单点更新,区间查询)

    传送门 有更新单个学生成绩和查询某个区间内学生成绩最大值两种操作 线段树代码 #include<bits/stdc++.h> using namespace std; +; using n ...

  8. Codewars笔记

    说明:以下内容均来自codewars网站,列举的试题我都做过且通过,并以此记录来学习python.   1,需求:将大小写互相转换,非字母的字符保留 我的代码: def to_alternating_ ...

  9. fiddler抓包工具教程

    Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能 ...

  10. 执行shell脚本时提示bad interpreter:No such file or directory的解决办法

    执行shell脚本时提示bad interpreter:No such file or directory的解决办法 故障现象:在终端直接cd /var正常,在shell脚本中执行则报错.原因是脚本是 ...