Void union(List &La,List Lb)
//将所有在线性表Lb中但不在La中的数据元素插入到La中
{
La_len = ListLength(La);Lb_len =ListLength(Lb);//求线性表的长度
For(i= 1;i<=Lb_len;i++)
{
GetElem(Lb,i,e);//取Lb中第i个数据元素赋给e
If(!LocateElem(La,e,equal))ListInsert(La,++La_len,e);//la中不存在和e相同的数据元素,则插入之
}
}
***************************************************************************************************************************
Void MergeList(List La,List Lb,List &Lc)
{
//已知线性表La和Lb中的数据元素按值非递减排列
//归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列
InitList(Lc);
i=j=1;k=0;
La_len =ListLength(La);Lb_len = ListLength(Lb);
While((i<=La_len)&&(j<=Lb_len)) //La和Lb均非空
{
GetElem(La,i,ai); GetElem(Lb,j,bj);
if(ai<=bj)
{
ListInsert(Lc,++k,ai);
++i;
}
else
{
ListInsert(Lc,++k,bj);
++j;
}
}
While(i<=La_len)
{
GetElem(La,i++,ai);
ListInsert(Lc,++k,ai);
}
While(j<=Lb_len)
{
GetElem(Lb,j++,bj);
ListInsert(Lc,++k,bj);
}
}
*************************************************************************************************************
3.构建一个空的线性表L
StatusInitList_Sq(SqList &L)
{
L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem) exit(OVERFLOW);//存储分配失败
L.length = 0;//空表长度为0
L.listsize = LIST_INIT_SIZE;//初始存储容量
return OK;
}
*************************************************************************************************************************
StatusListInsert_Sq(SqList &L,int I,ElemType e)
//在顺序线性表L中第i个位置之前插入新的元素e,i的合法值为1<=i<=ListLength_Sq(L)+1
{
if(i<1 || i>L.length+1) returnERROR; //i值不合法
if(L.length>=L.listsize) //当前存储空间已满,增加分配
{
Newbase= (ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVREFLOW);//存储分配失败
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;
}
*******************************************************************************************************************************
StatusListDelete_Sq(SqList &L,int i,ElemType &e)
{
//在顺序线性表L中删除第i个元素,并用e返回其值,i的合法值为1<=i<=ListLength-Sq(L)
if(i<1|| i>L.length+1) return ERROR; //i值不合法
p= &(L.elem[i-1]);//p为被删除元素的位置
e= *p;//被删除元素的值赋给e
q= L.elem+L.length-1;//表尾元素的位置
for(++p;p<=q;++p)
*(p-1) = *p;//被删除元素之后的元素左移
--L.length;//表长减1
returnOK;
}
**********************************************************************************************************************************************
6.在顺序线性表L中查找第1个值与e满足compare()的元素的位序,若找到返回其在L中的位序,否则返回0
intLocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
{
i=1;//i的初值为第1个元素的位序
p = L.elem;//p的初值为第一个元素的存储位置
while(i<=L.length&&!(*compare)(*p++,e))
++i;
if(i<=L.length) return i;
else return 0;
}
****************************************************************************************************************************************
VoidMergeList_Sq(SqList La,SqList Lb,SqList &Lc)
{
//已知线性表La和Lb中的数据元素按值非递减排列
//归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列
pa = La.elem;
pb =Lb.elem;
Lc.listsize =Lc.length = La.length + Lb.length;
pc = Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));
if(!Lc.elem)exit(OVERFLOW);//存储分配失败
pa_last = La.elem+La.length-1;
pb_last=Lb.elem_Lb.length-1;
while(pa<=pa_last&&pb<=pb_last)
{
if(*pa<*pb) *pc++=*pa++;
else *pc++=*pb++;
}
While(pa<=pa_last)*pc+==*pa++;
While(pb<=pb_last)*pc+==*pb++;
}
******************************************************************