C语言-有序表的合并

上代码:

#include "stdio.h"
#define MAXSIZE 100


typedef int ElemType;  /*顺序表中存放整型元素*/

typedef struct{

  ElemType elem[MAXSIZE];  //ElemType目前为整型;其可以为任意类型 

  int last;  //最后一个元素在数组中的下标 

}SeqList;



/*函数声明*/

void initList(SeqList *L);

void printList(SeqList L);

void inputData(SeqList *L);

void merge(SeqList *LA,SeqList *LB,SeqList *LC);




/*主函数*/

int main()

{

	SeqList La,Lb,Lc;



	/* 初始化三个顺序表*/

	initList(&La);

	initList(&Lb);

	initList(&Lc);



	/*给顺序表La和Lb赋初值*/

	printf("请给顺序表La输入元素(按非递减顺序),输入-100表示结束\n");

	inputData(&La);



	printf("请给顺序表Lb输入元素(按非递减顺序),输入-100表示结束\n");

	inputData(&Lb);



	merge(&La,&Lb,&Lc);  



	/*输出三个顺序表*/

	printf("\nLa=");	printList(La);

	printf("\nLb=");	printList(Lb);

	printf("\nLc(La+Lb)=");	printList(Lc);

	getchar();  //让输出界面不闪退,观察结果 


}




/*函数定义*/

void initList(SeqList *L)

{

	L->last=-1;

}



void inputData(SeqList *L)

{

	int i=0,num; 

	scanf("%d",&num); 

	while(num!=-100)

	{

		L->elem[i]=num;

		i++; 

		scanf("%d",&num); 

	}



	L->last=i-1;

}



void printList(SeqList L)

{

   int i;

   printf("(");

   for(i=0;i<=L.last;i++)

     printf("%d ",L.elem[i]);

   printf(")");

}



//以下函数是改程序的核心部分 
//下面是归并排序里面的 可以看看归并排序 

void merge(SeqList *LA,  SeqList *LB,  SeqList *LC)

{

	int i,j,k;

	i=0;j=0;k=0;

	while(i<=LA->last&&j<=LB->last)

		if(LA->elem[i]<=LB->elem[j])

		{

			LC->elem[k]= LA->elem[i];

			i++; 

			k++;

		}

		else

		{

			LC->elem[k]=LB->elem[j];

			j++; 

			k++;

        }

	while(i<=LA->last)	/*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/

	{

		LC->elem[k]= LA->elem[i];

		i++; 

		k++;

	}

	while(j<=LB->last)  /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/	

	{

		LC->elem[k]= LB->elem[j];

		j++; 

		k++;

	}

	LC->last=LA->last+LB->last+1;

}



贴图:

在这里插入图片描述


结束语:

路漫漫其修远兮 吾将上下而求索
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值