为了在线性表的某两个元素之间插入一个数据元素,则需将这两个元素中的第2个至最后一个数据元素依次往后移动一个位置。一般情况下,在第i(1<i≤n)个元素之前插入一个元素时,需将第i至第n(共n-i+1)个元素向后移动一个位置。算法如下:
Status ListInsert_Sq(SqList&L,int i,ElemType e){
//在顺序线性表L中第i个位置之前插入新的元素e,
//i的合法值为1≤i≤ListLength.Sq(L)+1
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;//插入e
++L.length;//表长增1
return OK;
}//ListInsert-Sq
版权声明:本文为weixin_43928264原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。