求两顺序表的交集、并集操作
(顺序表存储结构如下)
#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);
}