回 帖 发 新 帖 刷新版面

主题:求教一下

我才开始学数据结构  有些基本的问题 希望大家帮帮 
今天做作业是遇到这样一个问题
先看看程序
Status DeleteK(SqList &a,int i,int 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-1] =a.elem[j];
     a.length--;
      }
return Ok;
}//DeleteK
求找出错误   i<1||k<0||i+k>a.length  判断 我觉得有错
比如 线性表  11 33 44 99 22 66   当i=2  k=5  此时   a.length=6  2+4=6 不满足 判断条件  所以 我认为要将  判断条件改为(i<1||k<0||i+k>a.length+1)
还有个问题就是 成代码低效 很显然  每次只能删除一个元素  这需要修改
 我想了一段时间 就看了答案  答案是这样写的
if( i<1||k<0||i+k>a.length) return --
else
{ for(j=i+k;j<a.length;j++)
  a.elem[j-k]=a.elem[j];
a.length=a.length-k;}

首先 i<1||k<0||i+k>a.length也我修改的 不同 在则  答案中j=i+k  按上述假设 j=i+k=6 而a.length=6  不满足 for 循环中的判断 所以要退出   我不知道 我分析那里错了    请高手帮我分析一下 谢谢了 

回复列表 (共3个回复)

沙发

难道就没高手了吗

板凳

先整理一下:
Status DeleteK(SqList &a,int i,int 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-1] =a.elem[j];
                        a.length--;
                }
                return Ok;
        }
}//DeleteK



//////////////////////////////////////////////////////
//你没有讲明白啊,上面的代码没有写完整.....请请补充...

3 楼

if( i<1||k<0||i+k>a.length) return --
else
{ for(j=i+k;i<a.length+1;i++)
  a.elem[j-k]=a.elem[j];
a.length=a.length-k;}
应该可以了 我想

我来回复

您尚未登录,请登录后再回复。点此登录或注册