注册 登录
编程论坛 数据结构与算法

求解一道数据结构题 C语言的....

hellengoodd 发布于 2011-04-17 10:41, 535 次点击
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];
3 回复
#2
诸葛修勤2011-04-17 11:37
恩    答案 不行啊  

你的修改 是必须的
#3
诸葛修勤2011-04-17 11:39
自己完全可以写个小程序 测试下
#4
hellengoodd2011-04-17 21:45
谢谢诸葛大虾~
1