代码
typedef struct{
ElemType data[MAXSIZE];
int length;
}SqList;
//初始化线性表
Status InitList(SqList *L){
L->length=0;
return OK;
}
//置空线性表
Status ClearList(SqList *L){
L->length=0;
return OK;
}
// 得到第i个元素的值,用e返回
Status GetElem(SqList L,int i,ElemType *e){
if(L.length==0 || i<1 || i>L.length)
return ERROR;
*e = L.data[i-1];
return OK;
}
// 返回第一个和数据e满足关系的元素的位置
int LocateElem(SqList L,ElemType e){
int i;
if(L.length==0)
return 0;
for(i=0;i<L.length;i++){
if(L.data[i]==e )
break;
}
if(i>=L.length)
return 0;
return i+1;
}
//插入,在第i个位置之前插入新的元素e,L的长度加1
Status ListInsert(SqList *L ,int i,ElemType e ){
int k;
if(L->length==MAXSIZE)
retur Error;
if(i<1||i>L->length+1)
return ERROR;
if(i<=L->length) // 插入的数据不在表尾
{
for(k=L->length-1;k>=i-1;k--)
L->data[k+1]=L->data[k];
}
//插入新的元素
L->data[i-1]=e;
L->length++;
return OK;
}
// 删除
Status ListDelete(SqList *L,int i,ElemType *e ){
int k;
if(L->length==MAXSIZE)
retur Error;
if(i<1||i>L->length+1)
return ERROR;
*e=L->data[i-1];
if(i<L->length){
for(k=i;k<L->length;k++)
L->data[k-1]=L->data[k];
}
L->length--;
return OK;
}
//输出元素
Status visit(ElemType c ){
prinf("%d",c );
return OK;
}
Status ListTravese(SqList L ){
int i;
for(i=0;i<L.length;i++)
visit(L.data[i]);
printf("\n");
return OK;
}
// 合并链表
// 注意La->data的写法等于(*La).data
void unionL(SqList *La,SqList Lb){
int La_len,Lb_len,i;
ElemType e;
La_len=*La->length;
Lb_len= Lb.length;
for(i=1;i<=Lb_len;i++){
GerElem(LB,i,&e );
if(!LocateElem(*la,e))
ListInsert(La,++La_len,e );
}
}
int main(){
SqList L;
SqList Lb;
ElemType e;
Status i;
int j,k;
i = InitList(&L);
printf("初始化L后:L.length=%d\n",L.length);
for(j=1;j<=5;j++)
i=ListInsert(&L,1,j);
printf("在L的表头插入后1~5后:L.data=")
ListTrave(L);
printf("L.length")
printf("L是否是空:i=%d(1:是,0:否)\n",L.length);
i=ClearList(&L);
i=InitList(&Lb);
for(j=6;j<=15;j++)
i=ListInsert(&Lb,1,j);
unionL(&L,Lb);
printf("依次输出合并了Lb的L的元素:");
ListTraverse(L);
return 0;
}