顺序表的交集、并集

求两顺序表的交集、并集操作
(顺序表存储结构如下)

#define INIT_LIST_SIZE  20  //线性表大小
#define LISTCREAMENT 10    //若原来空间不够用,增加的长度
#pragma warning(disable:4996)//加上这个后VS2019可以用scanf与printf等
typedef int ElemType;
typedef struct {      //定义顺序表存储结构
	ElemType* elem;      //储存数据元素,它的存储位置就是存储空间的存储位置
	int length;      //线性表当前长度
	int listsize;    //线性表最大存储容量
}SqList;

1.求L1与L2的交集,放入L3中

//求L1与L2的交集,放入L3
void BothList(SqList L1, SqList L2, SqList& L3)
{//L3开始为空表
	ElemType* p1, * p2, * p3;
	p1 = L1.elem, p2 = L2.elem, p3 = L3.elem;
	while (p1 <= L1.elem + L1.length - 1 && p2 <= L2.elem + L2.length - 1)
	{
		if (*p1 < *p2)//当前p1所指元素小于p2,p1指针后移
		{
			p1++;
		}
		else if (*p2 < *p1)
		{
			p2++;
		}
		else
		{
			*p3 = *p1;//赋值给p3
			L3.length++;//L3当前长度加一
			p1++;//p1指针后移
			p2++;//p2指针后移
			p3++;
		}
	}
	if (L3.length > L3.listsize) exit(0);
}

2.求L1与L2并集

//L1与L2并集,放入L3
void BothListb(SqList L1, SqList L2, SqList& L3)
{
	ElemType* p1, * p2, * p3;
	p1 = L1.elem, p2 = L2.elem, p3 = L3.elem;
	while (p1 <= L1.elem + L1.length - 1 && p2 <= L2.elem + L2.length - 1)//L1,L2均不为空
	{
		if (*p1 <= *p2)//p1当前所指元素小于p2
		{
			*p3 = *p1;//p1赋值给p3
			p3++;//p3指针后移
			L3.length++;//p3表当前长度加一
			p1++;//p1指针后移
		}
		else
		{
			*p3 = *p2;
			p3++;
			L3.length++;
			p2++;
		}
	}
	while (p1<=L1.elem+L1.length-1)//L2为空L1不为空时
	{
		*p3 = *p1;
		p3++;
		L3.length++;
		p1++;
	}
	while (p2 <= L2.elem + L2.length - 1)
	{
		*p3 = *p2;
		p3++;
		L3.length++;
		p2++;
	}
	if (L3.length > L3.listsize) exit(0);
}
  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值