#include<stdio.h>
#include<stdlib.h>
#define maxsize 20
typedef struct
{
int data[20];
int len;
}sqlist;
sqlist *init_sqlist()
{
sqlist *L;
L=(sqlist*)malloc(sizeof(sqlist));
L->len=0;
return L;
}
void creat_sqlist(sqlist **L)
{
int i,n;
printf("请输入顺序表长度:\n");
scanf("%d",&n);
printf("请输入值:\n");
for(i=1;i<=n;i++)
scanf("%d",&(*L)->data[i]);
(*L)->len=n;
}
void merge(sqlist *A,sqlist *B,sqlist **C)
{
int i=1,j=1,k=1;
if(A->len+B->len>=maxsize)
printf("太长了!\n");
else
{
*C=(sqlist *)malloc(sizeof(sqlist));
while(i<=A->len&&j<=B->len)
if(A->data[i]<B->data[j])
(*C)->data[k++]=A->data[i++];
else
(*C)->data[k++]=B->data[j++];
while(i<=A->len)
(*C)->data[k++]=A->data[i++];
while(j<=B->len)
(*C)->data[k++]=B->data[j++];
(*C)->len=k-1;
}
}
void print(sqlist *L)
{
int i;
for(i=1;i<=L->len;i++)
printf("%4d",L->data[i]);
printf("\n");
}
void main()
{
sqlist *A,*B,*C;
A=init_sqlist();
printf("*** 创建顺序表A ***\n");
creat_sqlist(&A);
printf("顺序表A为:\n");
print(A);
B=init_sqlist();
printf("*** 创建顺序表B ***\n");
creat_sqlist(&B);
printf("顺序表B为:\n");
print(B);
C=init_sqlist();
printf("合并中...\n");
merge(A,B,&C);
printf("顺序表C为:\n");
print(C);
}
将有序表A、B合并为有序表C
最新推荐文章于 2024-04-26 17:02:36 发布