求解一道数据结构题 C语言的....
2.10 指出以下算法中的错误和低效之处,并将它改写为一个既正确又高效的算法。Status DeleteK(SqList &a,int i,int k)
{
//本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素
if(i<1||k<0||i+k>a.length) return INFEASIBLE;//参数不合法
else {
for(count=1;count<k;count++){
//删除第一个元素
for(j=a.length;j>=i+1;j--) a.elem[j-i]=a.elem[j];
a.length--;
}
return OK;
}
解:
Status DeleteK(SqList &a,int i,int k)
{
//从顺序存储结构的线性表a中删除第i个元素起的k个元素
//注意i的编号从0开始
int j;
if(i<0||i>a.length-1||k<0||k>a.length-i) return INFEASIBLE;
for(j=0;j<=k;j++)
a.elem[j+i]=a.elem[j+i+k];
a.length=a.length-k;
return OK;
}
这个答案是不是错了的...我觉得删除一个顺序表元素必须移动length-(k+i)个元素啊 for(j=0;j<=k;j++)
a.elem[j+i]=a.elem[j+i+k]; 是不是应该改为for(j=0;j<=length-(k+i);j++)
a.elem[j+i]=a.elem[j+i+k];