data数组里的元素有可能不是连续的。如果我们传入的下标i在data[i]里面就是空着的,我们让它data[i] = newitem。那change函数里面for循环寻找indexes数组里面的元素为i的过程那就有可能运行不了 并且 变成非最大索引堆。
我自己想到了一个解决办法,不知道这样可不可行`
void change(int i, Item newitem)
{
//判断data[i]是否有值
if (data[i] != NULL)
data[i] = newitem;
else
return cout << "该位置没有insert元素" << endl;
for (int j = 0; j < count; j++)
{
if (indexes[j] == i)
{
shiftdown(j);
shiftup(j);
return;
}
}
}`