两个线性表求并集(伪代码+具体实现代码)

1、问题描述
  假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现在求一个新的集合A = A U B。
  问:请编写出该算法伪代码。

2、算法原理
  算法:遍历线性表LB中的所有元素,把每个元素都在线性表LA中查找有无相同的元素,若没有把该元素插到LA中,重复此操作,直至遍历完线性表LB中的所有元素。
  注意点:每在线性表LA中插入一个元素之前,先要LA的表长加1,再插入。

3、算法伪代码

void Union(List &La,List Lb)    //La要用地址型变量,是把Lb插到La中;   
{       //功能:把所有在线性表Lb中但不在线性表La中的数据元素插到La中; 
	La_Len=ListLength(La);      //获得线性表La的长度; 
	Lb_Len=ListLength(Lb);      //获得线性表Lb的长度; 
	for(i=1;i<=Lb_Len;i++)      //遍历线性表Lb; 
	{
		GetElem(Lb,i,&e);        //获得线性表Lb中的元素,注意地址符的使用; 
		if(!LocateElem(La,e,equal))  //遍历线性表La,查找La中元素是否有与元素e不相同的元素; 
			{
				ListInsert(La,++La_Len,e); //如果有,先把La表长加1,再把该元素插到线性表La中; 
			}
	}
}   //Union;

4、C++代码实现

#include<iostream>
using namespace std;

int La[]={1,2,3,4,5,6};
int Lb[]={3,7,8,9};
int La_len=sizeof(La)/sizeof(La[0]);
int Lb_len=sizeof(Lb)/sizeof(Lb[0]); 

bool LocateElem(int a[],int n,int e)
{
	int num=0;	
	for(int i=0;i<n;i++)
	{
		if(a[i]==e)
			return true;
	}
	return false;
} 

void ListInsert(int a[],int &n,int e)
{
	a[n]=e;
	n++; 
}

void Union(int a[],int n)
{
	for(int i=0;i<=Lb_len;i++)
	{
		if(!LocateElem(La,La_len,Lb[i]))
		{
			ListInsert(a,La_len,Lb[i]);
		}
	}
}

int main()
{
	cout<<"合并前La中的元素:";
	for(int i=0;i<La_len;i++)
	{
		cout<<La[i]<<" ";
	}
	cout<<endl; 
	cout<<"合并前Lb中的元素:";
	for(int i=0;i<Lb_len;i++)
	{
		cout<<Lb[i]<<" ";
	}
	cout<<endl; 
	cout<<"合并后La中的元素:"; 
	Union(La,La_len);
	
	for(int i=0;i<La_len;i++)
	{
		cout<<La[i]<<" ";
	}
	return 0;	
}

运行结果
在这里插入图片描述

运行环境:DEV c++

至此,整个题目解答完毕!!!

 结语:以上就是我对这个问题的理解、解法,可能存在着更好、更简洁的解法代码,希望大家提出来,我们一起讨论,交换看法,共同进步。若上述代码中存在问题,望大家指正,谢谢大家看到结尾。(∩^∩)

奋斗的2351

发布了12 篇原创文章 · 获赞 3 · 访问量 384

猜你喜欢

转载自blog.csdn.net/weixin_45620022/article/details/105141798