一个关于C语言的问题,向顺序表中插入元素

void InsertElem(Sqlist *L, int i, int val) //在顺序表Sqlist的第i个位置上插入元素val
{
int *base, *insertPtr, *p;
if(i<1 || i>length+1)
exit(0); //非法插入
if(L->length >= L->listsize)
{
base = (int *)realloc(L->elem, (L->listsize+10)*sizeof(int)); //重新追加空间
L->elem = base; //更新内存基地址
L->listsize = L->listsize+100; //存储空间增大100单元
}
insertPtr = &(L->elem[i-1]); //insertPtr为插入位置
for( p=&(L->elem[L->length-1]); p>=insertPtr; p-- )
*(p+1) = *p; //将 i-1 以后的元素顺序后移一个元素的位置
*insertPtr = item; //在第i个位置插入元素item
L->length++; //表长+1

}

上面是一个插入元素的函数,length代表顺序表的长度,listsze代表数据表的容量,我要问的是这段
if(L->length >= L->listsize)
{
base = (int *)realloc(L->elem, (L->listsize+10)*sizeof(int)); //重新追加空间
L->elem = base; //更新内存基地址
L->listsize = L->listsize+100; //存储空间增大100单元
}

重新追加了10个sizeof(int)的空间后,容量不是应该加10 了吗?
为什么还要写 L->listsize = L->listsize+100;
length代表顺序表的长度,listsze代表数据表的容量

*insertPtr = item; //在第i个位置插入元素item==>打错了,item换成val

L->listsize = L->listsize+10; //存储空间增大100单元==>增大10单元
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-17
实在上是以原来的100个单元的基地址重新开辟了110个单元,从而达到在原来的后面重新追加10单元的效果。
第2个回答  2020-04-12
顺序比较下去,找到该元素在顺序表中的位置,然后插入就可以了
第3个回答  2012-09-16
写错了追问

哪里错了啊,我照着书上打的,

相似回答