#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
# defineTRUE 1
# defineERROR 0
# defineOK 1
# defineOVERFLOW
# defineFALSE 0
# defineLIST_INIT_SIZE 10
# defineLISTINCREMENT 5
typedefstruct{
int *elem;
int length;
int listsize;
}List;
voidInitList(List &L)
{
L.elem=(int*)malloc (50*sizeof(int));
L.length=0;
L.listsize=50;
}
voidListInsert(List &L, int i, int e)
{
int *q=&(L.elem[i-1]);
for(int*p=&(L.elem[L.length-1]);p>=q;p--)
*(p+1)=*p;
*q=e;
L.length++;
}
voidListDelete(List &L, int i)
{
int *q=L.elem+i-1;
for(int *p=L.elem+L.length-1;p>=q;q++)
*q=*(q+1);
L.length--;
}
voidMergeList(List la,List lb,List &lc)
{
InitList(lc);
int ai=0,bj=0,k=0;
lc.listsize=la.listsize+lb.listsize;
while(ai<=la.length-1&&bj<=lb.length-1)
{
if(la.elem[ai]<=lb.elem[bj])
{
lc.elem[k]=la.elem[ai];ai++;k++;
lc.length++;
}
else
{
lc.elem[k]=lb.elem[bj];bj++;k++;
lc.length++;
}
}
if(ai==la.length){
while(bj<=lb.length-1){
lc.elem[k]=lb.elem[bj];bj++;k++;
lc.length++;
}
}
if(bj==lb.length){
while(ai<=lb.length-1){
lc.elem[k]=lb.elem[ai];ai++;k++;
lc.length++;
}
}
}
voidListTraverse(List L,int printer)
{
for(int i=1;i<=L.length;i++)
{
printer=L.elem[i-1];
printf("%d ",printer);
}
}
voidListDeleteII(List &lc)
{
for(int i=0;i<lc.length;i++)
for(int j=i+1;j<lc.length;j++)
if(lc.elem[i]==lc.elem[j])
ListDelete(lc,j+1);
}
int main()
{
List La,Lb,Lc;
int j,b[7]={2,6,8,9,11,15,20},printer;
InitList(La); // 创建空表La。如不成功,则会退出程序的运行
for(j=1;j<=5;j++) // 在表La中插入5个元素,依次为1、2、3、4、5
ListInsert(La,j,j);
printf("La= ");
ListTraverse(La,printer); // 输出表La的内容
printf("\n");
InitList(Lb); // 创建空表Lb
for(j=1;j<=5;j++) // 在表Lb中插入5个元素,依次为2、4、6、8、10
ListInsert(Lb,j,2*j);
printf("Lb= ");
ListTraverse(Lb,printer); // 输出表Lb的内容
printf("\n");
MergeList(La,Lb,Lc); // 调用算法2.2,生成新表Lc(不改变表La和表Lb)
printf("Lc= ");
ListTraverse(Lc,printer); // 输出表Lc的内容
printf("\n");
ListDeleteII(Lc); //删除LC中重复元素
printf("Lc= ");
ListTraverse(Lc,printer); // 输出表Lc的内容
return 0;
}