优先队列

数据结构

struct PriorityQueue{
  int MAXNUM;
  int n;
  DataType *pq;
};
typedef struct PriorityQueue *PPriorityQueue;

struct PriorityQueue{ int MAXNUM; //容量 int n; //个数 DataType *pq; //数据};向优先队列中插入一个元素

void add_heap(PPriorityQueue papq, DataType x){
  int i;
  if(papq->n>=papq->MAXNUM) 
  {
    printf("FULL!\n");return ; //判断是否溢出 
  }
  for(i = papq->n;i>0 && papq->pq[(i-1)/2]>x; i=(i-1)/2) // 从第一空节点的父节点开始判断其是否大于x,模拟出来就是将大于x的节点均向下移动,相对而言就是空节点向根移动
    papq->pq[i] = papq->pq[(i-1)/2]; //将值往下挪动,变相认为腾出空间
  papq->pa[i] = x;
  papq->n++;//插入,n要加1
}

删除优先队列最小元

void removeMin_heap(PPriorityQueue papq)
{
  int s,i,child;
  DataType temp;
  if(isEmpty_heap(papq)) {printf("Empty!\n"); return ;}
  s = --papq->n; //先删除
  temp = papq->pq[s]; //把最后的元素赋给temp  
  i = 0; child = 1; //
  while(child<s){ //找寻最后元素存放的位置
    if(child<s-1 && papq->pq[child] > papq->pq[child+1]) //选择比较小的子节点
      child++;
    if(temp > papq->pq[child]) //空位向叶节点移动
    {
      papq->pq[i] = papq->pq[child];
      i=child;
      child = 2*i+1;
    }
    else break; //已经找到了适当的位置
  }
  papq->pq[i] = temp; //把最后位置填入
}

判断优先队列是否为空

int isEmpty_heap(PPriorityQueue papq)
{	
	return(papq->n==0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值