我的课本上有一道关于线性列表的题,我看不懂第12行的答案代码
L.length--;
。从顺序表中删除具有最小值的元素(假设是唯一的),并且函数返回被删除元素的值。空位置由最后一个元素填充,如果序列表为空,则显示错误消息并退出运行。
答案代码:
bool Del_Min(SqList &L,ElemType &value) {
if(L.length==0)
return false;
value=L.data[0];
int pos=0;
for(int i=l;i<L.length;i++)
if(L.data[i]<value){
value=L.data[i];
pos=i;
}
L.data[pos]=L.data[L.length-1];
L.length--;
return true;
}
“最小的值被最后一个元素替换”,是否意味着
data[pos]
元素没有被删除而是被其他元素替换?L.length--;
?
除了零长度的特殊情况(立即返回)之外,列表总是会变得更短。这就是为什么列表长度无条件减少的原因。
返回是通过引用参数
value
,它在函数中可能会更新多次(我认为这是不明智的)。
它来自的列表中的位置仍然存在,但不再用于存储删除的值。
为了有效地伪删除它,该位置将被列表中的最后一个值填充,当列表被认为总共较短时,该位置(否则会)被删除。
因此,间隙被填充,之前的最后一个值被保存,并且列表变短了一个。