在顺序表L的第p(1<=p<=length+1)个位置插入新的元素e.如果p的输入不正确,则返回0,代表插入失败;如果p的输入正确则将顺序表第p个元素及以后的元素右移一个位置,腾出一个空位置插入新元素,顺序表长度增加1,插入操作成功,返回1.
顺序表的结构定义
typedef struct
{
int data[maxsize];
int length;
}Sqlist;
书上的算法:
int insert(Sqlist &L,int p,int e)
{
int i;
if(p<1||p>L.length+1||L.length==maxSize)
return 0;
for(i=L.length;i>=p;--i)
L.data[i+1]=L.data[i];
L.data[p]=e;
++(L.length);
return 1;
}
我想问的是if语句中的 L.length==maxSize应该改成L.length+1==maxSize吧?因为这个时候才是表长已经达到顺序表的最大允许值吧?求真相,!
0号单元不存储数据
发错人了,我要发给另外两个的,我以为你说我错了,不好意思
追答你说的对。
所以长度达到
if(((pL.length+1)) || (L.length==maxSize-1))// 不在表范围,或满 ,退出
就是判断如果长度达到最大,下面的循环就不要做了。
(o_o)
一刷新,问题变了。
但是L.length永远不可能等于maxsize啊,L.length至少要比maxsize小1吧?假设按你说的,书上的代码没有错,if中是(L.length==maxsize),那么如果这时L.length==maxsize-1,则后面的for循环执行,i=L.length=maxsize-1, L.data[i+1]=L.data[i];岂不是错了?因为=左边的L.data[i+1]不就是L.data[maxsize]了吗?数组下标最多取L.data[maxsize-1]啊!
追答你现在条件又变了:0号单元不存储数据。如果这样的话,确实里面应该变成L.length==maxsize-1
本回答被网友采纳但是L.length永远不可能等于maxsize啊,L.length至少要比maxsize小1吧?假设按你说的,书上的代码没有错,if中是(L.length==maxsize),那么如果这时L.length==maxsize-1,则后面的for循环执行,i=L.length=maxsize-1, L.data[i+1]=L.data[i];岂不是错了?因为=左边的L.data[i+1]不就是L.data[maxsize]了吗?数组下标最多取L.data[maxsize-1]啊!