以下这段代码有什么问题:int ListInsert(SqList *L,int i,int e){ if (L -> length == L -> size){ printf("线性表已满\n"); return N; } if (i<1 || i>L -> length+1){ printf("有误的插入位置\n"); return N; } if (i!=L -> length+1){ for(int j=i;j<L -> length;j++){ L -> data[j]=L -> data[j-1]; } } L ->data[i-1]=e; L -> length++; return Y; }
时间: 2023-01-11 17:55:36 浏览: 69
这段代码可能有以下几个问题:
1. `if (i<1 || i>L -> length 1){` 应该是 `if (i<1 || i>L -> length + 1){`
2. `L -> length ;` 应该是 `L -> length++;`
3. 第一个 `if` 和第二个 `if` 之间没有大括号, 这可能会导致代码执行时出现错误.
4. 在第二个 `if` 中, 应该将 `return N;` 放在大括号的末尾.
5. 应该在函数的开头声明局部变量 `j`.
6. 在第二个 `if` 中, 应该将 `L -> data[j]=L -> data[j-1];` 放在循环的末尾, 否则会把当前位置的数据覆盖.
7. 在第二个 `if` 中, 应该将 `for(int j=i;j<L -> length;j ){` 改为 `for(int j=L->length-1;j>=i;j--){`
修改后的代码应该是这样的:
```
int ListInsert(SqList *L,int i,int e){
if (L -> length == L -> size){
printf("线性表已满\n");
return N;
}
if (i<1 || i>L -> length + 1){
printf("有误的插入位置\n");
return N;
}
{
for(int j=L->length-1;j>=i;j--){
L -> data[j+1]=L -> data[j];
}
}
L ->data[i-1]=e;
L -> length++;
return Y;
}
```