#include<stdio.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}SqList;
int InitList_Sq(SqList *L)
{
int i, n;
printf("请输入一个数:");
scanf("%d",&n);
if(n>MAXSIZE)
return ERROR;
printf("请输入%d个数:", n);
for(i=0;i<n;i++)
scanf("%d",&L->elem[i]);
L->length=n;
if(L==NULL)
return ERROR;
return OK;
}
int ListDisp(SqList L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
return OK;
}
Status ListInsert_Sq(SqList *L,int i, ElemType e)
{
int k;
if(L->length==MAXSIZE)
return ERROR;
if(i<=L->length)
{
for(k=L->length-1;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;
L->length++;
return OK;
}
Status ListDelete_Sq(SqList *L,int i, ElemType *e)
{
int k;
if(L->length==0)
return ERROR;
if(i<1 || i>L->length)
return ERROR;
*e=L->elem[i-1];
if(i<L->length)
{
for(k=i;k<L->length;k++)
{
L->elem[k-1]=L->elem[k];
}
}
L->length--;
return OK;
}
Status MergeOrderList(SqList LA,SqList LB,SqList *LC)
{
int i, ia=0,ib=0;
if(LA.length+LB.length>MAXSIZE)
return OVERFLOW;
i=0;
while(ia<LA.length && ib<LB.length)
{
if(LA.elem[ia]<LB.elem[ib])
{
LC->elem[i]=LA.elem[ia];
ia++;
}
else
{
LC->elem[i]=LB.elem[ib];
ib++;
}
i++;
}
if(ia<LA.length)
{
while(ia<LA.length)
LC->elem[i++]=LA.elem[ia++];
}
if(ib<LB.length)
{
while(ib<LB.length)
LC->elem[i++]=LB.elem[ib++];
}
LC->length=LA.length+LB.length;
return OK;
}
int main()
{
SqList L,LA,LB,LC;
ElemType e;
int i,flag;
flag = InitList_Sq(&L);
if(flag == ERROR)
{
printf("构造线性表失败!\n");
return 0;
}
printf("构造线性表成功!\n");
printf("输出数组元素:");
ListDisp(L);
printf("请输入要插入的元素:");
scanf("%d",&e);
printf("请输入要插入元素的位置:");
scanf("%d",&i);
flag = ListInsert_Sq(&L,i,e);
if(flag == ERROR)
{
printf("插入位置不合法!\n");
return 0;
}
else if(flag == OVERFLOW)
{
printf("表已满,无法插入,溢出!\n");
return 0;
}
else
printf("插入成功!\n");
printf("插入元素后的数组元素:");
ListDisp(L);
printf("请输入要删除元素的位置:");
scanf("%d",&i);
flag = ListDelete_Sq(&L,i,&e);
if(flag == ERROR)
{
printf("删除位置不合法!\n");
return 0;
}
else
printf("删除成功!\n");
printf("删除的元素为:%d\n",e);
printf("删除元素后的数组元素:");
ListDisp(L);
printf("两个有序表的合并:\n");
InitList_Sq(&LA);
InitList_Sq(&LB);
flag = MergeOrderList(LA,LB,&LC);
if(flag == OVERFLOW)
{
printf("合并后溢出!无法合并。\n");
return 0;
}
else
printf("合并成功!\n");
ListDisp(LC);
return 0;
}
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}SqList;
int InitList_Sq(SqList *L)
{
int i, n;
printf("请输入一个数:");
scanf("%d",&n);
if(n>MAXSIZE)
return ERROR;
printf("请输入%d个数:", n);
for(i=0;i<n;i++)
scanf("%d",&L->elem[i]);
L->length=n;
if(L==NULL)
return ERROR;
return OK;
}
int ListDisp(SqList L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
return OK;
}
Status ListInsert_Sq(SqList *L,int i, ElemType e)
{
int k;
if(L->length==MAXSIZE)
return ERROR;
if(i<=L->length)
{
for(k=L->length-1;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;
L->length++;
return OK;
}
Status ListDelete_Sq(SqList *L,int i, ElemType *e)
{
int k;
if(L->length==0)
return ERROR;
if(i<1 || i>L->length)
return ERROR;
*e=L->elem[i-1];
if(i<L->length)
{
for(k=i;k<L->length;k++)
{
L->elem[k-1]=L->elem[k];
}
}
L->length--;
return OK;
}
Status MergeOrderList(SqList LA,SqList LB,SqList *LC)
{
int i, ia=0,ib=0;
if(LA.length+LB.length>MAXSIZE)
return OVERFLOW;
i=0;
while(ia<LA.length && ib<LB.length)
{
if(LA.elem[ia]<LB.elem[ib])
{
LC->elem[i]=LA.elem[ia];
ia++;
}
else
{
LC->elem[i]=LB.elem[ib];
ib++;
}
i++;
}
if(ia<LA.length)
{
while(ia<LA.length)
LC->elem[i++]=LA.elem[ia++];
}
if(ib<LB.length)
{
while(ib<LB.length)
LC->elem[i++]=LB.elem[ib++];
}
LC->length=LA.length+LB.length;
return OK;
}
int main()
{
SqList L,LA,LB,LC;
ElemType e;
int i,flag;
flag = InitList_Sq(&L);
if(flag == ERROR)
{
printf("构造线性表失败!\n");
return 0;
}
printf("构造线性表成功!\n");
printf("输出数组元素:");
ListDisp(L);
printf("请输入要插入的元素:");
scanf("%d",&e);
printf("请输入要插入元素的位置:");
scanf("%d",&i);
flag = ListInsert_Sq(&L,i,e);
if(flag == ERROR)
{
printf("插入位置不合法!\n");
return 0;
}
else if(flag == OVERFLOW)
{
printf("表已满,无法插入,溢出!\n");
return 0;
}
else
printf("插入成功!\n");
printf("插入元素后的数组元素:");
ListDisp(L);
printf("请输入要删除元素的位置:");
scanf("%d",&i);
flag = ListDelete_Sq(&L,i,&e);
if(flag == ERROR)
{
printf("删除位置不合法!\n");
return 0;
}
else
printf("删除成功!\n");
printf("删除的元素为:%d\n",e);
printf("删除元素后的数组元素:");
ListDisp(L);
printf("两个有序表的合并:\n");
InitList_Sq(&LA);
InitList_Sq(&LB);
flag = MergeOrderList(LA,LB,&LC);
if(flag == OVERFLOW)
{
printf("合并后溢出!无法合并。\n");
return 0;
}
else
printf("合并成功!\n");
ListDisp(LC);
return 0;
}