=L.length:OVERFLOW
// i>=1&&i=L.length) // i=l.length 时表示为表的最后一个元素
exit(OVERFLOW);
for(j=1;j<=i+1;j++)
{
if(j==(i+1))
{
next_e=L.elem;
L.elem=p_elem;
return OK;
}
else
L.elem++;
}
}
///
//函数名:ListInsert()
//参数:SqList L,int i,ElemType e
//初始条件:线性表L已存在,1<=i<=ListLength(L)+1
//功能:在线性表中第i个数据元素之前插入数据元素e
//返回值:失败:ERROR
// 成功:OK
///
Status ListInsert(SqlistL,int i,ElemType e)
{
int *q=&(L.elem[i-1]);
ElemType *newbase,*p;
if(i<1||i>(L.length+1)) //i值不合法
return ERROR;
if(L.length>=L.listsize) //当前存储空间已满,增加分配
{
newbase=(ElemType*)realloc(L.elem,L.listsize+LISTINCREMENT*sizeof(ElemType));
if(newbase==NULL) //存储分配失败
exit(OVERFLOW);
L.elem=newbase; //赋予新的基地址
L.listsize+=LISTINCREMENT; //增加的存储容量
}
q=&(L.elem[i-1]); //插入元素的位置
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p; //插入元素位置之后的所有元素向后移1位
*q=e; //插入元素e
++L.length; //表长增加1
return OK;
}
///
//函数名:ListDelete()
//参数:SqList L,int i,Elemtype e
//初始条件:线性表L已存在,1<=i<=ListLength(L)
//功能:将线性表L中第i个数据元素删除
//返回值:失败:ERROR
// 成功:OK
///
Status ListDelet(SqlistL,int i,ElemType e)
{
if(i<1||(i>L.length))
return ERROR;
ElemType *p,*q;
p=&(L.elem[i-1]); //删除元素的位置,在Sqlist中i位置元素为L.elem[i-1]
e=*p; //被删除元素的值赋给e
q=L.elem+L.length-1; //表尾位置
for(++p;p<=q;++p)
*(p-1)=*p; //p后面的元素都向前移(左)一位
--L.length;
return OK;
}
///
//函数名:union()
//参数:SqList La,SqList Lb
//初始条件:线性表La,Lb已存在
//功能:将所有在线性表Lb中但不在La中的元素插入到La中
//返回值:失败:ERROR
// 成功:OK
///
void union(SqList &La, SqList Lb)
{
int i;
if(La.length==0||Lb.length==0) return ERROR;
for(i=0;i<=Lb.length;i++)
{
GetElem(Lb,i,e); //得到Lb中的第i个元素的值
If(!LacateElem(La,e)) //查看La中是否有e元素
listInsert(La,++La.length,e); //没有这将e元素插入表尾
}
retutn OK;
}