为什么线性列表的长度会递减,即使返回值的位置被某些东西替换了?

问题描述 投票:0回答:1

我的课本上有一道关于线性列表的题,我看不懂第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]
元素没有被删除而是被其他元素替换?
为什么第 12 行的代码仍然是
L.length--;

data-structures
1个回答
0
投票

除了零长度的特殊情况(立即返回)之外,列表总是会变得更短。这就是为什么列表长度无条件减少的原因。

返回是通过引用参数

value
,它在函数中可能会更新多次(我认为这是不明智的)。

它来自的列表中的位置仍然存在,但不再用于存储删除的值。

为了有效地伪删除它,该位置将被列表中的最后一个值填充,当列表被认为总共较短时,该位置(否则会)被删除。

因此,间隙被填充,之前的最后一个值被保存,并且列表变短了一个。

© www.soinside.com 2019 - 2024. All rights reserved.