线性表合并

例:

假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A U B。这就要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取得每个数据元素,并依值在线性表LA中进行查访,若不存在,则插入之。上述操作过程可用下列算法描述之。

void union(List & La, List Lb){

// 将所有在线性表Lb中但不在La中的数据元素插入到La中

La_len = ListLength(La);  // 求线性表La的长度

Lb_len = ListLength(Lb); // 求线性表La的长度

for(i = 1; i <= Lb_len; i++){

GetElem(Lb, i, e); // 取Lb中第i个数据元素赋给e

if(!LocateElem(La, e, equal))  ListInsert(La, ++La_len, e);

// La中不存在和e相同的数据元素,则插入之

}

} // union

分析:题目中只是说了有两个线性表,但没表明是有序的线性表。

实现代码如下:

#include 
   
   
    
    
#include 
    
    
     
     

int		k;
int 	La_len, Lb_len;


void munion(int a[], int b[], int c[])
{
	int i, j ;
	i = j = k = 0;
	while(i < La_len && j < Lb_len){
		if(a[i] < b[j])
			c[k++] = a[i++];	
		else
			c[k++] = b[j++];
	}
	while(i < La_len)
			c[k++] = a[i++];
	while(j < Lb_len)
			c[k++] = b[j++];
}


int 
main(void)
{
	int 	i = 0;
	printf("please input the length of list a and b: \n");
	scanf("%d %d", &La_len, &Lb_len);
	int 	LA[La_len], LB[Lb_len], LC[La_len + Lb_len];

	printf("please input the list a : \n");
	while(1){
		scanf("%d", &LA[i++]);	
		if(i == La_len)
				break;
	}
	i = 0;
	puts("List A:");
	while(1){
		printf("%d ", LA[i++]);
		if(i == La_len)
				break;
	}
	putchar('\n');

	i = 0;
	printf("please input the list b : \n");
	while(1){
		scanf("%d", &LB[i++]);	
		if(i == Lb_len)
				break;
	}
	i = 0;
	puts("List B:");
	while(1){
		printf("%d ", LB[i++]);
		if(i == Lb_len)
				break;
	}
	putchar('\n');

	/*
	 * now merger list a and b
	 */
	munion(LA, LB, LC);
	i = 0;
	while(1){
		printf("%d ", LC[i++]);	
		if(i == k)
				break;
	}

	exit(0);
}

    
    
   
   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值