//author:东方肖海 QQ:467064265
//version:1.0
//顺序表的合并算法
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
//定义结构体
typedef int ElemType;
typedef struct SqList
{
ElemType data[MAXSIZE];
int length;
}SqList;
//构造一个空顺序表L
SqList *init_SqList()
{
SqList *L;
L=(SqList *)malloc(sizeof(SqList));
if(!L)
{
exit(1);
}
L->length=0;
return L;
}
//初始化链表(为链表附初始值)
SqList *Start_SqList(SqList *L,int i,ElemType x)
{
if(!L)
{
printf("线性表为空\n");
exit(1);
}
L->data[i]=x;
L->length++;
if(L->length>=MAXSIZE)
{
printf("错误\n");
exit(1);
}
}
//顺序表的输出
void Print_SqList(SqList *L)
{
if(!L)
{
printf("无法输出内容,表L为空!\n");
}
int i;
for(i=0;i<L->length;i++)
{
printf("%3d",L->data[i]);
}
}
//合并算法
SqList *Merge_SqList(SqList *A,SqList *B)
{
SqList *C;
int i=0,j=0,k=0;
C=(SqList *)malloc(2*MAXSIZE *sizeof(SqList));
if(!C)
{
exit(1);
}
C->length=A->length+B->length;
while(i!=A->length&&j!=B->length)
{
if(A->data[i]<B->data[j])
{
C->data[k]=A->data[i];
i++;
k++;
}
else
{
C->data[k]=B->data[j];
j++;
k++;
}
}
while(i<=A->length-1)
{
C->data[k]=A->data[i];
i++;
k++;
}
while(j<=B->length-1)
{
C->data[k]=B->data[j];
j++;
k++;
}
return C;
}
//主函数
int main()
{
SqList *A,*B,*C;
A=init_SqList();
B=init_SqList();
C=init_SqList();
printf("请输入插入链表A内容的总数: ");
int i,n,num;
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个数的值: ",i+1);
scanf("%d",&num);
A=Start_SqList(A,i,num);
}
printf("请输入插入链表B内容的总数: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个数的值: ",i+1);
scanf("%d",&num);
B=Start_SqList(B,i,num);
}
printf("\n此时A表的内容为:\n");
Print_SqList(A);
printf("\n此时B表的内容为:\n");
Print_SqList(B);
C=Merge_SqList(A,B);
printf("合并后C表的内容为:\n");
Print_SqList(C);
return 0;
}
【数据结构】顺序表的合并算法
最新推荐文章于 2024-08-04 19:02:53 发布