#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAXSIZE 1024
typedef int datatype;
typedef struct
{
datatype data[MAXSIZE];
int last;
}sequenlist;
sequenlist *Create() //创建顺序表
{
int i=0;
int a;
sequenlist *L;
L=(sequenlist*)malloc(sizeof(sequenlist));
L->last=-1;
printf("请输入顺序表L中的元素,以'0'结束.\n");
scanf("%d",&a);
while(a!=0) //当输入为0时结束,输入过程中每个输入值以回车键隔开
{
L->data[i++]=a;
L->last++;
scanf("%d",&a);
}
return L;
}
sequenlist *Combine(sequenlist *A,sequenlist *B) //组合排序
{
sequenlist *C;
C=(sequenlist*)malloc(sizeof(sequenlist)); //开辟一个新的顺序表
C->last=A->last+B->last+1; //长度为两个顺序表之和
int i=0,j=0,k=0;
while((i<=A->last)&&(j<=B->last)) //进行比较
{
if(A->data[i]<B->data[j])
{
C->data[k]=A->data[i];
i++;k++;
}
else
{
C->data[k]=B->data[j];
j++;k++;
}
}
if((i>A->last)&&(j<=B->last)) //当一个顺序表比完后,把里一个的剩余的也赋值过去
{
while(j<=B->last)
{
C->data[k]=B->data[j];
j++;k++;
}
}
else if((i<=A->last)&&(j>B->last))
{
while(i<=A->last)
{
C->data[k]=A->data[i];
i++;k++;
}
}
return C;
}
void Output(sequenlist *L) //输出函数
{
printf("\n顺序表中的元素为:\n");
for(int i=0;i<=L->last;i++)
printf("%d ",L->data[i]);
printf("\n");
}
int main()
{
sequenlist *A,*B,*C;
A=Create(); //创建两个顺序表
B=Create();
C=Combine(A,B); //组合排序
Output(C);
getch();
}
两个链表的合并问题
最新推荐文章于 2021-12-09 21:07:09 发布