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

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

当前最小的值存在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;
}

 

 

posted @ 2012-07-17 22:47  代码改变未来  阅读(187)  评论(0编辑  收藏  举报