在ADT优先级队列的堆实现中,优先级值最高的项始终位于数组的前端或根中?
或者是,具有最高优先级值的ADT优先级队列在数组的n-1个插槽中?
答案 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> >