数据结构的一个题

就是一个顺序表的插入,我有一点不明白。
void list_insert(seqlist *L,elementtype x,int i)
{int j;
if(L→listlen==maxlen) error("overflow");
else if(i<1||i>L→listlen+1) error("position error");
else {for(j=L→listlen-1;j>=i-1;j--)
L→data[j+1]=L→data[j];
L→data[i-1]=x;
L→listlen++; }
}

L→listlen的位置是紧跟最后一个元素还是在这一段存储空间的最后?
for循环里为什么不是j=listlen?

很高兴为楼主解答,如果满意,希望你采纳

L->listlen的位置一般不能说空,只能说在你没有插入数据之前此位置的值没什么意义,顺序表一般都要足够大,也就是浪费空间的办法,但实际上你要用到数组的元素个数不多,也就listlen(满足于你的需要),listlen可以说是不空的,为顺序表预留了足够大的空间,就是你的顺序表长度为listlen,它后面还有的,listlen本身和后面预留的空间的值没什么意义的,关键是预留空间,简单的说你插入一个数据,它可以扩展空间,有意义的是下标从0到listlen-1,因为数组的存储是从0开始的。

for循环里为什么不是j=listlen?那是因为你插入一个数据,那么你得把顺序表的最后一个元素开始逐一向后移,最后一个元素的下标是listlen-1, j=L→listlen-1,那么这条语句在刚开始循环时

L→data[listlen]=L→data[listlen-1];也就最后一个元素向后移动,后面的元素也就是顺序表预留的空间,插入后顺序表的长度加1,所以最后要L→listlen++;
温馨提示:答案为网友推荐,仅供参考
相似回答