c++数据结构代码解释~~ 麻烦真正明白的好心人帮我解释解释~ 我就是不太理解~~非常感谢啦~~

//插入元素
Status ListInsert_Sq(SqList &L, int i, ElemType e)
{
ElemType *newbase,*p,*q;
if(i<1 || i>L.length+1) return ERROR; //i不合法
if (L.length >=L.listsize)
{ //当前空间已满,增加分配
newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if (!newbase) exit(OVERFLOW); //分配失败
L.elem = newbase; //新基址
L.listsize +=LISTINCREMENT; // 增加容量
}
q = &(L.elem[i-1]); //q为插入位置
for (p=&(L.elem[L.length -1]);p>=q; --p)
*(p+1) = *p; //元素后移
*q = e; //插入
++L.length; //表长增长1
return OK;
} // ListInsert_Sq

我的问题是:
1插入元素的函数中~
1)L.elem[i-1]什么意思?
2)L.elem[L.length -1]什么意思?
3)为什么是--p?而不是p++?

这就是对一个结果链的插入而已.首先要理解的是,插入函数的三个参数.
&L是要插入元素的链表,i是要插入的位置,而e则是要插入的元素.那么链表就是一个ElemType类型的链表.

L.elem[i-1]就是要插入位置的元素,表示的意思就是插入到该元素的前边.比如我们说要插入到第五位,那么插入时的序号为L.elem[4],因为L.elem[0]是第一位,元素计位是从0开始的!而L.elem[i-1]显然是求要插入元素位置的元素.而&(L.elem[i-1])则是获得相应位置的指针.

这个理解了,那么L.elem[L.Lehgth-1]也好理解了吧?他就是最后一个元素.而p=&(L.elem[L.Length-1])就是最后一个元素的指针.当然,如果你都知道p的初始条件是最后一个元素的指针的话,就应该知道为什么是--p了,那p如果是加,必定出界的!所以移动是是从最后一个向后移动一位,直到移动到插入位置.这样就把插入位置"留"出来了,然后就链表插入一个元素就可以了!当然,链表的长度也自然要多计一位了!所以你还会看到++L.Length的语句!
温馨提示:答案为网友推荐,仅供参考
相似回答