数据结构----------------优先队列

优先队列

主要用于:1.插入

     2.删除最大元素

基于实现这两项功能,用二叉堆来实现,

分析:

____________MaxPQ<Key>implementsIterator<Key>_______________________

insert()

delMax()                           优先队列的2个主要功能

------------------------------------------------------------------------------------------------

isEmpty()         //判断是否为空

size()     //计算队列中元素的个数(就是数组的length)

max()             //返回最大元素

resize()          //加倍数组长度,必要的时候

------------------------------------------------------------------------------------------------

swim(int k)    //上浮

sink(int k)     //下沉(队列经过插入和删除后二叉树的结构有可能是不不平衡需要用这两个方法调整)

-----------------------------------------------------------------------------------------------

less(int i, int j)     //比较两个元素的大小

exch(int i, int j)    //交换两个元素

-------------------------------------------------------------------------------------------------

isMaxHeap()        //判断基于二叉树实现的堆否平衡

isMaxHeap(int k)

时间: 2024-07-30 13:44:06

数据结构----------------优先队列的相关文章

数据结构--优先队列(堆排序)

数据结构--优先队列(堆排序) 优先队列:不是先进先出啦,下面的代码是大顶堆,大的先出. 在之前理解堆排序的基础上,在来理解优先队列. 还是用这个公式: leftNo = parentNo*2+1 rightNo = parentNo*2+2 parentNo = (nodeNo-1)/2 每次进队列是从最后进,在慢慢上浮. 每次出队列,堆顶先出,在把队尾调到堆顶,在下浮. 上代码 package sy181002; import java.util.Arrays; /** * 优先队列 * *

JAVA数据结构--优先队列(堆实现)

优先队列(堆)的定义 堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权.堆即为解决此类问题设计的一种数据结构. 我个人比较通俗的理解就是比如我们平常下载视频看,我们打算下载两部视频,一部2G,一部只有200M.优先队列的思想就是先下载那部体积较小的视频,这样也比较合理,可以下完200M后

javascript数据结构-优先队列

这里之所以扩充一个 有限队列 是因为,生活使用中队列通常会附加优先级,比如排队买票,一般老人和军人等会有优先权限. 实现:继承上篇的 普通队列实现.这里用一种方法,入队的时候,进行排序插入到指定位置,输出不变. 优先队列类 //继承自 Queue function PriorityQueue(){ Queue.call(this); } 继承原型方法 function base(p, c){ var h = {}, P = p.prototype, C = c.prototype; for(va

深入理解空间搜索算法 ——数百万数据中的瞬时搜索

转自 干货|深入理解空间搜索算法 ——数百万数据中的瞬时搜索 2017-05-01 10:50 全球人工智能:专注为AI开发者提供全球最新AI技术动态和社群交流.用户来源包括:北大.清华.中科院.复旦.麻省理工.卡内基梅隆.斯坦福.哈佛.牛津.剑桥等世界名校的AI技术硕士.博士和教授:以及谷歌.腾讯.百度.脸谱.微软.华为.阿里.海康威视.滴滴.英伟达等全球名企的AI开发者和AI科学家. 文章来源:medium 编译:孙菁 上图为全球138,000个热门地点的R-tree的可视化图示 我这个人沉

奶牛晒衣服(题解)

奶牛晒衣服[问题描述]在熊大妈英明的带领下,时针和他的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情.圣人王担负起了这个重任.洗完衣服后,你就要弄干衣服.衣服在自然条件下用1 的时间可以晒干A 点湿度.抠门的熊大妈买了1 台烘衣机.使用烘衣机可以让你用1 的时间使1件衣服除开自然晒干的A 点湿度外,还可烘干B 点湿度,但在1 的时间内只能对1 件衣服使用.N 件的衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)

本文出自:http://blog.csdn.net/svitter 题目12:计算机学院学生会的打印机(优先队列) 小明抱怨学生会的打印机不符合FIFO的原则,看到很多在他后面来打印的同学比他先打印出来.五分钟前,小明的文件就是下一个候选的,如今小明的文件又排到了后面.学生会的同学给小明解释说,学生会的打印机不是採用传统的队列方式,而是採用一种自定义的优先队列方式:每一个要打印的文件被赋予了一个从1到9的优先级(9最高,1最低).打印规定例如以下: 将队列中要打印的文件f从队列中拿出来: 假设在

【数据结构】优先队列和堆

优先队列(priority queue) 对于一般的队列是在队列的尾部添加数据,在头部删除,以便先进先出. 而优先队列中的每个元素都有一个优先级,每次将一个元素放入队列中,而每次出队时都是将优先级最大的那个元素出队,称为高进先出(largest-in,first-out). 优先队列必须实现以下几个操作 1.入队(push):将一个元素放入队列中. 2.出队(pop):将优先级最高的元素从队列中删除. 要实现上面的操作可以维护一个有序的链表.每次插入数据时维护整个链表有序,即使用插入法,每次出队

优先队列 - 数据结构 (二叉堆)

优先队列包括二叉堆.d-堆.左式堆.斜堆.二项队列等 1.二叉堆 堆是一棵被完全填满的二叉树,有可能例外的是在底层,底层上的元素从左到右填入.这样的树称为完全二叉树. 堆序的性质:在一个堆中,对于每一个节点X,X的父亲的关键字小于(或等于)X中的关键字,根节点除外(它没有父节点).完全二叉树可以用数组实现. //关于二叉堆的头文件定义 如果要插入的元素是新的最小值,那么它将一直被推向堆顶.这样在某一个时刻,i将是1,我们就需要另Insert函数令程序跳出while循环,这个值必须保证小于或者至少