#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW -1
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
//顺序表存储结构的定义
typedef struct
{
ElemType *elem;
int length;
int listsize;
}sqlist;
//顺序表的初始化
Status InitList_sq(sqlist *L)
{
L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L->elem)
exit(OVERFLOW);
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return OK;
}
//顺序表的插入
Status ListInsert_sq(sqlist L, int i, int e)
{
ElemType *newbase, *p, *q;
if (i < 1 || i > L->length+1)
{
return ERROR;
}
if (L->length >= 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->length-1]) ; p >= q ; --p)
{
*(p+1) = *p;
}
*q = e;
++L->length;
return OK;
}
//顺序表的删除
Status ListDelete_sq(sqlist *L, int i, ElemType *e)
{
ElemType *p, *q;
if ( i < 1 || i > L->length)
{
return ERROR;
}
p = &(L->elem[i-1]);
*e = *p;
q = L->elem + L->length-1;
for(++p; p<= q; ++p)
{
*(p-1) = *p;
}
--L->length;
return OK;
}
//顺序表的归并
void MergeList_sq(sqlist La, sqlist *Lb, sqlist *Lc)
{
ElemType *pa ,*pb,*pc,*pa_last,*pb_last;
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++ = *pb++;
else
*pc++ = *pb++;
}
while(pa <= pa_last)
*pc++ = *pa++;
while(pb <= pb_last)
*pc++ = *pb++;
}
int main() {
int i;
int n = 5;
ElemType e;
sqlist La,Lb,Lc;
if(InitList_sq(&La))
{
printf("Init is ok\n");
printf("Length:%d\n",La.length);
printf("listsize:%d\n",La.listsize);
} else {
printf("error!");
}
//顺序表输入初始值
printf("Please input the value of sq:\n");
for (i = 1; i <= n; i++)
{
scanf("%d",&e);
if (ListInsert_sq(&La, i, e) != OK)
{
break;
}
}
for(i = 1; i <= La.length; i++)
{
printf("e[%d]=%d\n",i-1, La.elem[i-1]);
}
printf("Length:%d\n\n",La.length);
///插入
printf("Please input the place of insert:\n");
scanf("%d",&i);
printf("Please input the value of insert:\n");
scanf("%d",&e);
if(ListInsert_sq(&La,i,e) == OK)
{
for (i = 1; i <= La.length; i++)
{
printf("e[%d]=%d\n",i-1, La.elem[i-1]);
printf("Length:%d\n\n",La.length);
}
}
//删除
printf("Please input the place of delet:\n");
scanf("%d",&i);
if(ListDelete_sq(&La, i, &e) == OK)
{
printf("The delete elem is:%d\n",e);
}
for (i = 1; i < La.length; i++)
{
printf("e[%d]=%d\n",i-1, La.elem[i-1]);
printf("Length:%d\n\n",La.length);
}
//顺序表的归并
printf("Please input the value of sq2:\n");
InitList_sq(&Lb);
InitList_sq(&Lc);
for (i = 1; i <= n; i++)
{
scanf("%d",&e);
if (ListInsert_sq(&Lb, i, e) != OK)
{
break;
}
}
MergeList_sq(&La, &Lb, &Lc);
for(i = 1; i <= Lc.length; i++)
{
printf("e[%d]=%d\n",i-1, Lc.elem[i-1]);
}
return 0;
}