利用大顶堆实现一个优先队列。

7.利用大顶堆实现一个优先队列。对于队列的操作应该至少支持下列几种指令:Voidenqueue(intObjectID,intPriority);Intdequeue()... 7. 利用大顶堆实现一个优先队列。对于队列的操作应该至少支持下列几种指令:
Void enqueue(int ObjectID, int Priority);
Int dequeue();
Void changeweight(int ObjectID, int newPriority);
函数enqueue向优先队列中插入一个ID号为ObjectID,优先级为priority的新对象。函数dequeue从优先队列中删除优先级最高的对象,并返回该对象的ID号。函数changeweight将ID号为ObjectID的对象的优先级改为newPriority。你需要一种机制,以便获取所需要对象在堆中的位置。你还需要对堆的实现进行修改,以存储对象在数组中的位置,使得堆中对象的修改可以在辅助数组结构中记录下来。
展开
 我来答
匿名用户
2013-09-05
展开全部
怎么感觉是考研难度的复习题了~~写了一点, #include <iostream>
#include <string>
#define MAX 100
using namespace std;
class Elem{
public:
int id;
int pri;
};
class Comp{
public:
static bool It(Elem x,Elem y){
return x.pri<y.pri;
}
static bool eq(Elem x,Elem y){
return x.pri==y.pri;
}
static bool gt(Elem x,Elem y){
return x.pri>y.pri;
}
};
template <class Elem,class Comp> class maxheap{
Elem* Heap;
int size;
int n;
char bk[MAX];
void siftdown(int);
public:
void enqueue(int id,int pri);
int dequeue();
void changeweight(int id,int pri);
maxheap(Elem* h,int num,int max)
{
Heap=h;
n=num;
size=max;
buildHeap();
}
int heapsize() const
{
return n;
}
bool isLeaf(int pos) const
{
return (pos>=n/2)&&(pos<n);
}
int leftchild(int pos) const
{
return 2*pos+1;
}
int rightchild(int pos) const
{
return 2*pos+2;
}
int parent(int pos) const
{
return (pos-1)/2;
}
bool insert(const Elem&);
bool removemax(Elem&);
bool remove(int,Elem&);
void buildHeap()
{
for(int i=n/2-1;i>=0;i--)
siftdown(i);
}
};
前半段我看应该是没问题的。
太晚了,睡觉!我也怕写错,300分!!!如果写完发你邮
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式