优先队列与堆

上传人:日度 文档编号:146161465 上传时间:2020-09-27 格式:DOC 页数:8 大小:153KB
返回 下载 相关 举报
优先队列与堆_第1页
第1页 / 共8页
优先队列与堆_第2页
第2页 / 共8页
优先队列与堆_第3页
第3页 / 共8页
优先队列与堆_第4页
第4页 / 共8页
优先队列与堆_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《优先队列与堆》由会员分享,可在线阅读,更多相关《优先队列与堆(8页珍藏版)》请在金锄头文库上搜索。

1、题目:优先队列与堆问题描述 假设某医生看病人的顺序是由病人的病情严重程度来决定。护士按照所有病人来医院的时间顺序给病人编号ID,依次为1,2,3,n;并且根据病人的病情严重程度设置Priority值,病越重,Priority的值越小。当医生开始工作时,护士根据病人的Priority值,由小到大依次安排病人看病。试为护士编写程序安排病人看病的先后次序。 基本要求 (1) 利用最小值堆实现一个优先队列。 (2) 对于优先队列应该支持如下操作:初始化队列的init操作;获得队列中元素个数的size操作;判定队列是否为空的empty操作;获得队列中最优先的元素的值的top操作;向队列中插入一个元素的p

2、ush操作;删除队列中最优先的元素的pop操作。 (3) 利用优先队列存入所有病人的信息(编号和病情严重程度)。最后利用优先队列获得病人看病的次序。 测试数据:输入:1 15 2 3 3 5 4 20 5 10 1 1 输出 :2 3 5 1 4 实现提示 (1) 最小值堆采用数组作为物理存储结构,每个元素是一个结构体变量,包含编号ID和病情严重程度Priority值。 (2) 用户录入1 1表示输入结束。 实验分析:优先级队列是这样的一种数据结构,对它的访问或者删除操作只能对集合中通过指定优先级方法得出的最高优先级元素进行。优先级队列是公平的,对于任何两个具有相同优先级的元素,首先被删除的是

3、那个在队列中存在时间最长的元素。如果元素是Int类型且按照其排列的顺序进行比较,那么具有最高优先级的元素就是优先级队列中相应的int值最小的那个元素。如果元素是Int类型,但是比较方法与原排列顺序相反,那么具有最高优先级的元素就是优先级队列中相应的int值最大的元素。到底是最小的还是最大的元素优先。实质上堆可用来实现优先级队列,或者说堆就是一种优先级队列。由于堆的添加元素与删除元素时都会破坏堆结构,所以添加与删除进都要进行结构调整。一般普通的队列添加是在最后加入,但优先级队列却不一定添加到最后,他会按照优先级算法把它插入到队列当中去,出队时还是从第一个(也即最小元素,优先级最高)开始,即取根元

4、素,这样保证了队列中优先级高的先服务,而不是先来先服务了。Heap类是对接口的一种高效实现。堆是一种完全二叉树。由于使用基于数组的完全二叉树的表示,可以根据子节点的索引快速计算出你父节点的索引,反之亦然,所以,使用数组来表示堆,它是利用了数组可以根据给定索引随机访问元素的特性。实验结果:实验代码:#include using namespace std; class HEAP /定义堆 public: int IDnum; int priority; void operator=(HEAP& temp)IDnum=temp.IDnum;priority=temp.priority; ; voi

5、d sift(HEAP* a,int i,int n) /筛选int j; HEAP t; t=ai; while(j=2*i+1)n) if(jn-1&aj.priorityaj+1.priority) j+; if(t.priority=0;i-) sift(a,i,n); for(i=n-1;i 0;i-) p=a0; a0=ai; ai=p; sift(a,0,i); void push(HEAP* a,int& num,int IDnum,int priority) /将元素压入栈 anum.IDnum=IDnum; anum+.priority=priority; void pop(HEAP* a,int& num,int& ID) /出栈 ID=a0.IDnum; for(int i=0;i IDnum priority; if(IDnum=-1) break; push(h,num,IDnum,priority); heap(h,num); for(int i=0;i num;i+) cout (hi.IDnum) endl;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号