线性表的合并之求解一般集合的并集问题(顺序表)

本文介绍了一个编程问题,如何使用C++通过线性表LA和LB表示集合A和B,并实现将B中的元素合并到A中,确保集合互异性。作者提供了详细的步骤、算法描述和C++代码示例。
摘要由CSDN通过智能技术生成

目录

1问题描述:

2问题分析:

3代码如下:

4运行结果:


1问题描述:

        已知两个集合A和B,现要求一个新的集合A=AuB。例如,设

                A=(7,5,3,11),B=(1,2,3)

要求合并后为(7,5,3,11,1)(即遵循集合互异性的原则)

2问题分析:

可以利用两个线性表LA 和LB 分别表示集合A 和B(即线性表中的数据元素为集合中的成员), 这样只需扩大线性表 LA,将存在于 LB中而不存在于 LA 中的数据元素插入到 LA 中去。只要从LB中依次取得每个数据元素, 并依值在 LA中进行查访, 若不存在, 则插入之。
上述操作过程可用算法 2.15 来描述。具体实现时既可采用顺序形式, 也可采用链表形式。
算法2.15 线性表的合并
【算法步骤】
① 分别获取LA 表长m 和LB表长n)
②从LB中第1个数据元素开始, 循环n次执行以下操作:
● 从LB中查找第i(1≤i≤n)个数据元素赋给e;
● 在LA 中查找元素e, 如果不存在, 则将e插在表LA的最后。

主要思想就是从B里挨个取出元素,然后遍历A看是否有重复,若没有就插入A的最后即可

3代码如下:

#include<iostream>
using namespace std;
#include<stdlib.h>
#define MAXSIZE 100
#define ok -1
#define error 0
typedef int Status;
typedef int ElemType; 
typedef struct
{
	ElemType *elem;
	int length;
}Sqlist;
void menu();
Status InitList(Sqlist &L,Sqlist &M);
void chushi(Sqlist &L,int x);
void shuchu(Sqlist L); 
Status GetElem(Sqlist L,int i,ElemType &e);
Status find1(Sqlist L,ElemType e);
Status ListInsert(Sqlist &L,int i,ElemType e);

int main()
{
	Sqlist L,M;
	int x,i,j;
	Status m;
	ElemType e;
	m=InitList(L,M);
	if(m==ok) cout<<"初始化成功"<<endl;
	else 	  cout<<"初始化失败"; 
	cout<<"请决定为线性表L赋几个元素:";
	cin>>x;
	chushi(L,x);
	cout<<"线性表L为:"<<endl;
	shuchu(L);
	cout<<"请决定为线性表M赋几个元素:";
	cin>>x;
	chushi(M,x);
	cout<<"线性表M为:"<<endl;
	shuchu(M);
	for(i=1;i<=M.length;i++)
	{
		GetElem(M,i,e);
		if(find1(L,e)!=error)
			{
				L.length++;
				ListInsert(L,L.length,e);
			}
		shuchu(L);
	}
	return 0;
}
Status InitList(Sqlist &L,Sqlist &M)//初始化开辟空间 
{
	L.elem=new ElemType[MAXSIZE];
	M.elem=new ElemType[MAXSIZE];
	if(!L.elem||!M.elem) return error;
	L.length=0;
	M.length=0;
	return ok;
}
void chushi(Sqlist &L,int x)//初始化赋值 
{
	ElemType m;
	for(int i=0;i<x;i++)
	{
		cout<<"请对第"<<i+1<<"个位置赋值";
		cin>>m;
		L.elem[i]=m;
		L.length++;
	}
}
void shuchu(Sqlist L)//输出操作 
{
	cout<<"顺序表为:";
	for(int i=0;i<L.length;i++)
	{
		cout<<L.elem[i]<<"  ";
	}
	cout<<endl;
	system("pause");
}
Status GetElem(Sqlist L,int i,ElemType &e)//根据位置进行取数据的取值操作 
{
	if(i<1||i>L.length) return error;
	e=L.elem[i-1];
	return ok;
}
Status ListInsert(Sqlist &L,int i,ElemType e)//插入 
{
	if(i<1||i>L.length+1) return error;
	if(L.length==MAXSIZE) return error;
	L.elem[i-1]=e;
	return ok;
}
Status find1(Sqlist L,ElemType e)
{
	for(int i=0;i<L.length;i++)
	{
		if(L.elem[i]==e) return error;
	}
	return ok;
}
4运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰克尼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值