堆实现

时间:2009-11-24 22:39:59

标签: c++ data-structures

在ADT优先级队列的堆实现中,优先级值最高的项始终位于数组的前端或根中?

或者是,具有最高优先级值的ADT优先级队列在数组的n-1个插槽中?

2 个答案:

答案 0 :(得分:1)

优先级队列的实现方式,最高优先级值始终位于阵列的第一个(第零个)位置。它们通常实现为堆:

index  0 1 2 3 4 5 6 7 8 9
parent / 0 0 1 1 2 2 3 3 4

这是因为

很容易找到父母
(index - 1) / 2 

(使用整数除法时)

答案 1 :(得分:1)

你可以否定优先权并获得你想要的东西。

但是关于n-1槽是不正确的,因为它是一个实现细节(在本例中是C ++),如果你的意思是std::priority_queue类模板。 这已经不是关于ADT而是实现细节了。

您实际上可以将它用于您的目的: 例如。 int的通常优先级队列是std::priority_queue<int>,但优先级相反的是std::priority_queue<int, std::vector<int>, std::greater<int> >