【算法设计-优先队列】优先队列的实现与操作

优先队列是堆排序的一个具体应用。

优先队列分为如下几个操作:

1.INSERT(S,x)把元素x插入到优先队列中。

2.MAXIMUM(S):返回s中具有最大关键字的元素。

3.EXTRACT_MAX(S):去掉S中最大关键字的元素

4.INCREASE_KEY(S,x,k):将元素x的关键字值增加到k,k是不小于x的元素。

优先队列的应用:

1.共享计算机系统的作业调度。最大优先队列要i记录要执行的各个作业以及他们之间的相对优先级。当一个作业完成或者被中断后,调度器调用EXTRACT_MAX从所有的等待作业中,选出具有最高优先级的作业来执行。在任何时候调度器可以调用INSERT把一个新作业假如到队列中来。

2.可以用于最小生成树和单元最短路径优先算法中,需要应用DECREASE_KEY的应用。

代码:

/*
Author:Bai 
Name:优先队列
Use for:1.共享计算机系统中的作业调度
        2.基于事件驱动的模拟器
3.用在最小生成树和单元最短路径中
Date:2015/4/30
*/
#include<iostream>
using namespace std;
typedef struct heap
{
 int heap_size;
 int *key;
}heap;
void initialize(heap *A)
{
A->key=new int;
A->heap_size=0;
}
void MAX_HEAPIFY(heap *A,int i)//为了使堆保持大根堆的性质(我这里利用了循环操作的方法,而算法导论中应用了递归调用的办法)
{
//非递归方法
int largest;
      int l=2*i;//l是A的左孩子
 int r=2*i+1;//r是A的右孩子
 if(l<=A->heap_size&&A->key[l]>A->key[i])//这里的大于号更改成小于号就是小根堆排序
 largest=l;
 else 
 largest=i;
 if(r<=A->heap_size&&A->key[r]>A->key[largest])
 largest=r;
  while(largest!=i)
  {
 int temp=A->key[i];
 A->key[i]=A->key[largest];
 A->key[largest]=temp;
  i=largest;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值