这是一个顺序存储的插入的实现操作,为什么会有if(i==MAXSIZE+1)这个条件判断,不要行不行


//插入  位序i处插入元素X,注意对应的下标是i-1 ,1<=i<=L->Last+2 (这里错了吧,不能等于L->Last+2,只能到L->Last+1)
bool Insert(List L,ElementType X,int i){
    //1.判定是否满;2.判定位序是否合法;3.移动;4.插入;5.表长加1    
    if(L->Last==MAXSIZE ){
        return false;
    }
    if(i<1||i>=L->Last+2){
        return false;
    }
    if(i== MAXSIZE+1){ 
       L->Data[i-1] = X;
    }
    for(int j=L->Last;j>=i;j--){        
            L->Data[j]=L->Data[j-1]; 
        }
        L->Data[i-1]=X;
    
        L->Last++; 
        return true; 

}

感觉不需要,因为last已经在控制和MAXSIZE的关系了
而且这句应该有问题,MAXSIZE表示最大容量,那么数组下标应该是从0到MAXSIZE-1。如果i等于MAXSIZE+1,那么L->Data[i-1]就是L->Data[MAXSIZE],岂不是越界了?
第8行的if判断应该更严谨一下,当i>MAXSIZE时就应该return false了。

可以不要,但是第二个if需要把i>=MAXSIZE+2改成i>=MAXSIZE+1.
你这个代码有问题啊,MAXSIZE应该是顺序表中元素的最大个数吧,不应该取到MAXSIZE+1这个位置,当i==MAXSIZE+1时,L->Data[i-1]这里会越界。
代码修改如下:

//插入  位序i处插入元素X,注意对应的下标是i-1 ,1<=i<=L->Last+2 (这里错了吧,不能等于L->Last+2,只能到L->Last+1)
bool Insert(List L,ElementType X,int i){
    //1.判定是否满;2.判定位序是否合法;3.移动;4.插入;5.表长加1    
    if(L->Last==MAXSIZE ){
        return false;
    }
    if(i<1||i>=L->Last+1){ //这里是i>=L->Last+1,不应该是i>=i>=L->Last+2,当i==L->Last+1时,顺序链表会越界
        return false;
    }
    /*
    if(i== MAXSIZE+1){ 
        L->Data[i-1] = X;
    }*/
    for(int j=L->Last;j>=i;j--){        
        L->Data[j]=L->Data[j-1]; 
    }
    L->Data[i-1]=X;

    L->Last++; 
    return true; 

}

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632