//插入 位序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;
}