两个顺序表LA,LB
合并生成一个升序表LC。
算法:将LA中的元素1与LB中的元素1比较,若LA1>LB1,则LB1移入LC1,然后将LA1与LB2比较,将较小的数填入LC2,依次进行,直至全部元素比较完毕。
#include<stdio.h>
#include<stdlib.h> //要使用的malloc()函数定义在这个头文件中 ,动态分配内存
#include<process.h> //系统库文件,
#define MAX 100
typedef struct Seq
{
int elem[100];
int length;
} RSeq;
RSeq init1() //初始化表LA
{
RSeq *R1;
R1=(struct Seq*)malloc(sizeof(struct Seq));
R1->length=6;
R1->elem[0]=6;
R1->elem[1]=23;
R1->elem[2]=42;
R1->elem[3]=55;
R1->elem[4]=66;
R1->elem[5]=77;
return(*R1);
}
RSeq init2() //初始化表LB
{
RSeq *R2;
R2=(struct Seq*)malloc(sizeof(struct Seq));
R2->length=5;
R2->elem[0]=61;
R2->elem[1]=231;
R2->elem[2]=421;
R2->elem[3]=551;
R2->elem[4]=661;
return(*R2);
}
//合并顺序表LA和LB
RSeq merge(RSeq LA,RSeq LB)
{
RSeq LC;
RSeq *LLC;
LLC=(struct Seq*)malloc(sizeof(struct Seq));
LC.length=11;
int i=0; //表A的位置
int j=0; //表B的位置
int k=0;
while(i<LA.length&&j<LB.length){
if(LA.elem[i]>LB.elem[j]){
LC.elem[k]=LB.elem[j++];
}
else{
LC.elem[k]=LA.elem[i++];
}
k++;
}
while(i<LA.length){
LC.elem[k++]=LA.elem[i++];
}
while (j<LB.length){
LC.elem[k++]=LB.elem[j++];
}
return(LC);
}
//遍历显示
void display(RSeq Q)
{
int QQ=Q.length;
for(int i=0;i<QQ;i++){
printf("%4d",Q.elem[i]);
Q.length++;
}
}
//主函数
int main(){
RSeq LA,LB,LC;
LA=init1();
LB=init2();
display(LA);
printf("\n");
display(LB);
printf("\n");
LC=merge(LA,LB);
display(LC);
system("pause");
}
结果: