算法和数据结构排序优先级队列

优先级队列与堆相似,此处用小根堆模拟优先级队列。

当前最小的值存在x[1]。

insert 操作

void insert(T t)
{
int i,p;
x[++n]=t;//把t插入到x[n]
for(i=n;i>1&&x[p=i/2]>x[i];i=p)//如果父节点比子节点大
swap(x[p],x[i]);//交换两元素
}

查找并删除当前的最小值

T extractmin()
{
int i,c;
T t=x[1];
x[1]=x[n--]//替换x[1]为x[n]
for(i=1;(c=2*i)<=n;i=c)
{
if(c+1<=n&&x[c+1]<x[c])//比较左右孩子节点大小
c++;//如果右孩子节点比左孩子节点小
if(x[i]<=x[c])
break;
swap(x[c];x[i]);
}
return t;
}
原文地址:https://www.cnblogs.com/tgkx1054/p/2596526.html