博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优先队列:左式堆
阅读量:5067 次
发布时间:2019-06-12

本文共 1894 字,大约阅读时间需要 6 分钟。

1、NPL(零路径长):从x到一个没有儿子的节点的最短路径的长。

具有一个或者0个儿子的节点的NPL为0,NPL(NULL)=-1。

任意节点的零路径长比它的儿子的零路径长的最小值多1。

2、左式堆

(1)满足二叉堆的所有性质。

(2)对于堆的每一个节点x,左儿子的零路径长度至少与右儿子的零路径长度一样大(即NPL(Left)>=NPL(Right))

3、性质:

在右路径上有r个节点的左式树至少有2^r-1个节点。

(N个节点的左式树的一条右路径最多含有log(N+1)个节点)

4、具体操作:

#include
#include
#include
#include
using namespace std;struct Node{ int data,Npl; struct Node *Left,*Right;}; typedef struct Node* PriorityQueue;PriorityQueue Merge1(PriorityQueue Q1,PriorityQueue Q2);bool IsEmpty(PriorityQueue Q) //与二叉堆的判断是否为空的方式相同 { return Q==NULL;}PriorityQueue Merge(PriorityQueue Q1,PriorityQueue Q2) //合并两个左式堆 { if(Q1==NULL) return Q2; if(Q2==NULL) return Q1; if(Q1->data
data) return Merge1(Q1,Q2); else return Merge1(Q2,Q1);}PriorityQueue Merge1(PriorityQueue Q1,PriorityQueue Q2){ if(Q1->Left==NULL) Q1->Left=Q2; else{ Q1->Right=Merge(Q1->Right,Q2); if(Q1->Left->Npl
Right->Npl){ PriorityQueue tp=Q1->Left; Q1->Left=Q1->Right; Q1->Right=tp; } Q1->Npl=Q1->Right->Npl+1; } return Q1;}PriorityQueue Insert1(int x,PriorityQueue Q) //插入 { PriorityQueue tp=new Node; if(tp==NULL) printf("Out of Space!!!\n"); else{ tp->data=x;tp->Left=tp->Right=0; tp->Npl=1; Q=Merge(tp,Q); } return Q;}PriorityQueue DeleteMin1(PriorityQueue Q) //删除最小值,就是出队 { PriorityQueue Left,Right; if(IsEmpty(Q)){ printf("The Priority Queue is Empty!!!\n"); } else{ Left=Q->Left; Right=Q->Right; free(Q); return Merge(Left,Right); } return Q;}void Print(PriorityQueue Q) //输出最终结果 { if(Q){ Print(Q->Left); printf("%d ",Q->data); Print(Q->Right); }}int main(void){ PriorityQueue Q1=NULL,tp,Q2=NULL; int n,m,i,x; cin>>n; for(i=0;i
>m; for(i=0;i
data); tp=DeleteMin1(tp); } return 0;}/*测试数据:41 2 3 467 8 9 5 10 11 */
View Code

 

转载于:https://www.cnblogs.com/2018zxy/p/10338041.html

你可能感兴趣的文章
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
IOS-图片操作集合
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
泛型第23条:请不要在新代码中使用原生态类型
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
【AppScan心得】IBM Rational AppScan 无法记录登录序列
查看>>
[翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
查看>>
简化通知中心的使用
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
html 简介
查看>>
session如何保存在专门的StateServer服务器中
查看>>
react展示数据
查看>>
测试计划
查看>>
选择器
查看>>
Mysql与Oracle 的对比
查看>>
idea的maven项目无法引入junit
查看>>
jquery实现限制textarea输入字数
查看>>