1、线性表的顺序表示时
Status ListInsert(SqList * L, int i, ElemType e)
{//在L的第i个位置之前插入新的数据元素e,L的长度加1
ElemType * newbase, * q, * p;
if (i<1 || i>(* L).length+1)//i值不合法
{
return ERROR;
}
if ((* L).length >= (* L).listsize)//当前存储空间已满,增加分配
{
if (!(newbase = (ElemType *)realloc((*L).elem,((* L).listsize+LIST_INCREMENT)*sizeof(ElemType))))
{
exit(OVERFLOW);//存储空间分配失败
}
(* L).elem = newbase;//新基址
(* L).listsize += LIST_INCREMENT;//增加存储容量
}
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;
}
2、线性表的链式表示时
//在带头结点的单链表L的第i个位置之前插入元素e
Status ListInsert(LinkList L,int i,ElemType e)
{
int j = 0;
LinkList p = L,s;
while (p && j
p = p->next;
j++;
}
if (!p || j>i-1)//i<1或者>表长
{
return ERROR;
}
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return OK;}