//单链表实现
#include<stdio.h>
#include<stdlib.h>
#define N 10
#define M 5
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
LNode *CreateList(int n);
void MergeList(LNode *pa,LNode *pb,LNode *pc);
int main()
{
LinkList LA,LB,LC;
LNode *pa,*pb,*pc;
//创建链表LA LB
LA=CreateList(N);
LB=CreateList(M);
//创建空表LC
LC=(LinkList)(malloc(sizeof(LNode)));
LC->next=NULL;
pa=LA->next;
pb=LB->next;
pc=LC;
MergeList(pa,pb,pc);
for(pc=LC->next;pc;pc=pc->next)
printf("%3d",pc->data);
putchar('\n');
return 0;
}
LNode *CreateList(int n)
{
LinkList L;
LNode *p;
L=(LinkList)(malloc(sizeof(LNode)));
L->next=NULL;
int i;
printf("Enter %d numbers: ",n);
for(i=0;i<n;i++)
{
p=(LinkList)(malloc(sizeof(LNode)));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
return L;
}
void MergeList(LNode *pa,LNode *pb,LNode *pc)
{
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
}
//顺序表实现
#include<stdio.h>
#include<stdlib.h>
#define N 10
#define M 5
typedef struct
{
int *elem;
int length;
}SqList;
int *CreateList(int n);
void MergeList(int lengthA,int lengthB,int *elemA,int *elemB,int *elemC);
int main()
{
SqList LA,LB,LC;
int i;
LA.length=5;
LB.length=3;
//创建表LA LB
LA.elem=CreateList(LA.length);
LB.elem=CreateList(LB.length);
//创建空表LC
LC.elem=(int *)(malloc(sizeof(int)*(LA.length+LB.length)));
//将LA LB 合并到LC
MergeList(LA.length,LB.length,LA.elem,LB.elem,LC.elem);
for(i=0;i<LA.length+LB.length;i++)
printf("%3d",LC.elem[i]);
putchar('\n');
return 0;
}
int *CreateList(int n)
{
SqList L;
int i;
L.elem=(int *)(malloc(sizeof(int)*n));
printf("Enter %d numbers: ",n);
for(i=0;i<n;i++)
scanf("%d",&L.elem[i]);
return L.elem;
}
void MergeList(int lengthA,int lengthB,int *elemA,int *elemB,int *elemC)
{
int i,j,k;
i=j=k=0;
while(i<lengthA&&j<lengthB)
{
if(elemA[i]<=elemB[j])
{
elemC[k]=elemA[i];
i++;
k++;
}
else
{
elemC[k]=elemB[j];
j++;
k++;
}
}
if(i>=lengthA)
for(;j<lengthB;j++)
elemC[k++]=elemB[j];
else
for(;i<lengthA;i++)
elemC[k++]=elemA[i];
}