You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

顺序表删除最小值后已用最后元素填充,为何仍执行L.length--?

关于顺序表删除最小元素代码中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=1;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;
}

逻辑解释

首先得明确:顺序表的length属性记录的是当前有效元素的个数,不是底层数组的容量。你疑惑的核心是没搞懂“填补空位”和“删除元素”的本质区别:

  • L.data[pos] = L.data[L.length-1]这一步只是用最后一个有效元素,把最小元素所在的位置填满,避免顺序表出现“空洞”(顺序表要求元素连续存储)。但这时候原末尾的元素相当于在数组里存了两份——一份在pos位置,一份在原末尾位置。
  • 执行L.length--是把原末尾的那份“重复元素”排除在有效范围之外,这样顺序表的有效元素个数就减少了1,真正完成了“删除一个元素”的操作。

举个实际例子:假设顺序表当前有效元素是[3,1,4,2],length=4:

  1. 找到最小元素是1,位置pos=1
  2. 把最后一个元素2放到pos=1的位置,数组变成[3,2,4,2]
  3. 执行L.length--后,有效元素个数变为3,此时顺序表的有效元素是前3个[3,2,4],原末尾的2不再被视为有效元素,完全符合题目“删除最小元素,用最后一个元素填空位”的要求。

如果不执行L.length--,顺序表的有效元素个数还是4,相当于只是把最小元素的值替换成了最后一个元素的值,根本没完成“删除元素”的要求。

内容的提问来源于stack exchange,提问作者WinnieJiang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:18:20