1045: 集合的交运算的实现
题目描述
假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。编程实现集合A和集合B的交运算。
输入
第一行为集合A的数据元素个数n; 第二行输入n个集合A的数据元素 ; 第三行为集合B的数据元素的个数; 第四行输入m个集合B的数据元素
输出
A和B的交集
样例输入
8
0 5 6 3 8 7 9 10
7
1 3 4 7 8 9 5
样例输出
5 3 8 7 9
#include<bits/stdc++.h>
# define maxsize 50
using namespace std;
struct link
{
int data;
link *next;
};
void creat(link *&p)
{
p=new link;
p->next=NULL;
}
void store(link *&p,int num,int a[])
{
p=new link;
p->data=a[0];
link *l1,*s1;
s1=p;
for(int i=1;i<num;i++)
{
l1=new link;
l1->data=a[i];
l1->next=NULL;
s1->next=l1;
s1=l1;
}
}
void join(link *&p1,link *&p2,link *&p3)
{
link *l1,*l2,*l3,*s;
l1=p1,l2=p2,l3=p3;
while(l1!=NULL)
{
l2=p2;
while(l2!=NULL)
{
if(l1->data==l2->data)
{
s=new link;
s->data=l1->data;
s->next=NULL;
l3->next=s;
l3=s;
break;
}
else l2=l2->next;
}
l1=l1->next;
}
}
void Cout(link *&p)
{
link *l=p->next;
while(l!=NULL)
{
cout << l->data <<' ';
l=l->next;
}
}
int main()
{
int n,m,a[maxsize],b[maxsize];
cin >> n;
for(int i=0;i<n;i++)
{
cin >> a[i];
}
cin >> m;
for(int i=0;i<m;i++)
{
cin >> b[i];
}
link *p1,*p2,*p3;
store(p1,n,a);
store(p2,m,b);
creat(p3);
join(p1,p2,p3);
Cout(p3);
return 0;
}