#include "stdio.h"
#include "stdlib.h"
#define LIST_INIT_SIZE 100
#define OVERFLOW -2
#define ERROR 0
#define OK 1
#define LISTINCREMENT 10
typedef int ElemType;
typedef int Status;
typedef struct sqlist
{ ElemType*elem;
int listlength;
int listsize;
}SqList;
Status InitList_Sq(SqList*L)
{ L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem) exit(OVERFLOW);
L->listlength=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
int Listlength (SqList*L)
{ return L->listlength;
};
int GetElem(SqList*L,int i,ElemType e)
{
if(0listlength)
return e=L->elem[i-1];
else
return ERROR;
}
Status ListInsert_Sq(SqList*L,int i ,ElemType e)
{
ElemType *newbase,*p,*q;
if(i<1||1>L->listlength+1) return ERROR;
if(L->listlength>=L->listsize)
{ newbase = (ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT) * sizeof (ElemType));
if(!newbase) exit(OVERFLOW);
L->elem=newbase;
L->listsize=L->listsize+LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->listlength-1]);p>=q;--p)
*(p+1)=*p;
L->elem[i-1]=e;
++L->listlength;
return OK;
}
void MergeList(SqList La,SqList Lb,SqList*Lc)
{
ElemType i,j,k,La_len,Lb_len,ai,bj;
InitList(Lc);
i=j=1;k=0;
La_len=ListLength(La);Lb_len=ListLength(Lb);
while((i<=La_len)&&(j<=Lb_len))
{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);
}
}
void main()
{
SqList La;
if(InitList_Sq(&La)==OK)
printf("顺序表La初始化成功");
else
printf("顺序表La初始化失败");
}