#include <iostream>
#include <iterator>
#include <list>
using namespace std
int main()
{
int a[]={1,5,8,12,5,-5,32}
int b[]={3,5,1,-3,10}
list<int >set1(a,a+sizeof(a)/sizeof(int))
list<int >set2(b,b+sizeof(b)/sizeof(int))
list<int >result
set1.sort()
. set2.ort()
//交集
set_intersection(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result))
copy(result.begin(),result.end(),ostream_iterator<int >(cout," "))
cout<<endl
result.clear()
//并集
set_union(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result))
copy(result.begin(),result.end(),ostream_iterator<int >(cout," "))
cout<<endl
result.clear()
//差集
set_difference(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result))
copy(result.begin(),result.end(),ostream_iterator<int >(cout," "))
return 0
}
用3个数组,一个保存第一个集合,-个保存另一个集合,再一个保存差集.然后利用比较对他们进行操作.
单链表实现求两个集合的差集
int Find(LinkList L,datatype x)
{
LNode *p
p=L->next//这里不明白为什么要把L->next赋给p (L->next不就等于是第二个结点的指针了么)
while(p!=NULL&&p->data<x) p=p->next
if(p->data==x) return 1
else return 0
}
LinkList Intersection1(LinkList La,LinkList Lb)
{
LNode *pa,*r
pa=La
while(pa->next!=NULL)
if (Find(Lb,pa->next->data)) pa=pa->next
else {r=pa->next
pa->next=r->next
free(r)
}
return La
}