题目
函数ListDelete_sq实现顺序表删除算法,请在空格处将算法补充完整。int ListDelete_sq(Sqlist *L,int i)(int k;if(i<1||i>L->length) return ERROR;for(k=i-1;k<L->length-1;k++)L->slist[k]= (1) ;(2) ;return OK;)
函数ListDelete_sq实现顺序表删除算法,请在空格处将算法补充完整。
int ListDelete_sq(Sqlist *L,int i){
int k;
if(i<1||i>L->length) return ERROR;
for(k=i-1;k<L->length-1;k++)
L->slist[k]= (1) ;
(2) ;
return OK;
}
题目解答
答案
答案:(1)L->slist[k+1] (2) --L->Length
解析
考查要点:本题主要考查顺序表删除操作的实现逻辑,包括元素前移和长度调整两个关键步骤。
解题核心思路:
- 元素前移:删除第
i个元素后,需要将第i+1个元素及之后的所有元素向前移动一位,覆盖被删除的位置。 - 长度调整:删除元素后,顺序表的逻辑长度需要减1。
破题关键点:
- 循环逻辑:循环从
i-1开始,依次将后续元素前移。 - 边界条件:循环终止条件需确保不越界,且最后调整长度。
第(1)空
逻辑分析:
删除第i个元素后,后续元素需要依次前移。例如,原第i+1个元素(索引为i)应移动到第i个位置(索引为i-1)。因此,循环中应将L->slist[k+1]的值赋给L->slist[k]。
答案:
L->slist[k+1]
第(2)空
逻辑分析:
元素前移完成后,顺序表的逻辑长度应减1,以释放最后一个无效元素的位置。因此,需执行L->length--。
答案:
--L->length