## 有序顺序表的合并

``````#include <stdio.h>
#define maxlength 50
typedef struct
{

int elements[maxlength];
int last;
} LIST;
typedef int position;
void Insert(int x,position p,LIST &L)
{

position q;
if(L.last>=maxlength-1)
printf("list is full");
else if((p>L.last+1)||(p<1))
printf("position does't exist");
else
{

for(q=L.last;q>=p;q--)
L.elements[q+1]=L.elements[q];
L.last=L.last+1;
L.elements[p]=x;
}
}
void Merge(LIST L1,LIST L2,LIST &L3)
{

int i=1,j=1,k=1;
while(i<=L1.last&&j<=L2.last)
{

if(L1.elements[i]<L2.elements[j])
{

L3.elements[k]=L1.elements[i];
i++;k++;
}
else
{

L3.elements[k]=L2.elements[j];
j++;k++;
}
}
while (i<=L1.last)
{

L3.elements[k]=L1.elements[i];
i++;k++;
}
while (j<=L2.last)
{

L3.elements[k]=L2.elements[j];
j++;k++;
}
L3.last=k-1;

}
void print(LIST L)
{

int i;
for(i=1;i<=L.last;i++)
printf("%d\t",L.elements[i]);
putchar('\n');
}
void main()
{

LIST L1,L2,L3;
L1.last=0;
L2.last=0;
Insert(1,1,L1);
Insert(3,2,L1);
Insert(5,3,L1);
Insert(2,1,L2);
Insert(4,2,L2);
Insert(6,3,L2);
print(L1);
print(L2);
Merge(L1,L2,L3);
print(L3);
}

``````

## 链表的复制

``````#include <stdio.h>
#define N 50
struct celltype
{

int element;
celltype *next;
} ;
typedef celltype *LIST;
typedef celltype *position;
void CreatListR(LIST &L,int a[],int n)
{

position s,r;
int i;
L=new celltype;
r=L;
for(i=0;i<n;i++)
{

s=new celltype;
s->element=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void copy(LIST L1,LIST &L2)
{

position p,s,r;
p=L1->next;
r=L2;
while (p!=NULL)
{

s=new celltype;
s->element=p->element;
r->next=s;
r=s;
}
r->next=NULL;
}
void print(LIST L)
{

position p;
p=L->next;
while(p!=NULL)
{

printf("%d",p->element);
p=p->next;
}
}
void main()
{

LIST L1,L2;
int a[N],i,n;
printf("��������������L1Ԫ�صĸ���:");
scanf("%d",&n);
printf("������L1�е�Ԫ��:");
for(i=0;i<n;i++)
{

scanf("%d",&a[i]);
}
CreatListR(L1,a,n);
print(L1);
copy(L1,L2);
print(L2);
}
``````

## 链表的合并

``````#include <stdio.h>
#define N 50
struct celltype
{

int element;
celltype *next;
} ;
typedef celltype* LIST;
typedef celltype* position;
void CreatListR(LIST &L,int a[],int n)
{

position s,r;
int i;
L=new celltype;
r=L;
for(i=0;i<n;i++)
{

s=new celltype;
s->element=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void Merge (LIST L1, LIST L2,LIST &L3)
{

position p=L1->next,q=L2->next,r,s;
L3=new celltype;
while(p!=NULL&&q!=NULL)
{

if(p->element<q->element)
{

s=new celltype;
s->element=p->element;
p=p->next;
r->next=s;
r=s;
}
else
{

s=new celltype;
s->element=q->element;
q=q->next;
r->next=s;
r=s;
}
}
if(q!=NULL) p=q;
while (p!=NULL)
{

s=new celltype;
s->element=p->element;
p=p->next;
r->next=s;
r=s;
}
r->next=NULL;
}
void print(LIST L)
{

position p;
p=L->next;
while(p!=NULL)
{

printf("%d",p->element);
p=p->next;
}
}
void main()
{

LIST L1,L2,L3;
int a[N],b[N],i,n1,n2;
printf("��������������L1Ԫ�صĸ���:");
scanf("%d",&n1);
printf("�밴�ǽ�������L1�е�Ԫ��:");
for(i=0;i<n1;i++)
{

scanf("%d",&a[i]);
}
printf("��������������L2Ԫ�صĸ���:");
scanf("%d",&n2);
printf("�밴�ǽ�������L2�е�Ԫ��:");
for(i=0;i<n2;i++)
{

scanf("%d",&b[i]);
}
CreatListR(L1,a,n1);
CreatListR(L2,b,n2);
print(L1);
putchar('\n');
print(L2);
Merge(L1,L2,L3);
print(L3);
}
``````