最小堆需要解释
Explanation needed for min heap
本文关键字:解释 更新时间:2023-10-16
我了解最小堆的基本工作原理,以下是Robert Sedgewick书中的实现:
template <class Item>
class PQ
{
private:
Item *pq;
int N;
public:
PQ(int maxN)
{ pq = new Item[maxN]; N = 0; }
int empty() const
{ return N == 0; }
void insert(Item item)
{ pq[N++] = item; }
Item getmax()
{ int max = 0;
for (int j = 1; j < N; j++)
if (pq[max] < pq[j]) max = j;
exch(pq[max], pq[N-1]);
return pq[--N];
}
};
我无法理解的是getMax函数中的这两个语句:
exch(pq[max], pq[N-1]);
return pq[--N];
为什么我们需要将 max 元素与倒数第二个插入元素中的元素交换?
他将max元素交换到末尾,然后"弹出"它;通过减少"size"变量(N),他实际上使最后一个元素(现在是max)元素无法访问,并且下次插入元素时将被覆盖。
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?