两个链表的合并问题

#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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值