//集合
//南有乔木
//2018/10/13
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<cstdlib>
#define ERROR 0
#define OK 1
#define ElemType int
using namespace std;
typedef struct Lnode
{
ElemType data;
struct Lnode* next;
}Lnode, *Assemble;
class List
{
protected:
Assemble head;
public:
Assemble Gethead(Assemble h) { head = h;};
int Init_Assemble();//初始化集合
Assemble Input_Assemble();//输入集合元素
Assemble Remove_Duplicate();//清除重复项
int display();//输出集合元素
friend Assemble Intersection(List L1, List L2, List L1_2);//求并集
friend Assemble Union_Xor(List L1, List L2, List L12);//求交集与异或
};
int List::Init_Assemble()//初始化集合
{
head = NULL;
if(head)
{
exit(OVERFLOW);
}
return OK;
}
Assemble List::Input_Assemble()//输入集合元素
{
Assemble p, q;
q = (Assemble) malloc (sizeof(Lnode));
head = p = q;
p->next = NULL;
ElemType data;
cout<<"请输入元素,以-1结束:";
cin>>data;
while(data!=-1)
{
q = (Assemble) malloc (sizeof(Lnode));
q->data = data;
p->next = q;
p = q;
cout<<"请输入元素,以-1结束:";
cin>>data;
}
p->next = NULL;
return head;
}
Assemble List::Remove_Duplicate()//清除重复项
{
Assemble p, q, temp;
ElemType data;
p = q = head->next;
while(p)
{
data = p->data;
q = p;
while(q&&q->next)
{
if(q->next->data!=data)
{
q = q->next;
}else
{
temp = q->next;
q->next = q->next->next;
free(temp);
}
}
p = p->next;
}
return head;
// Assemble pa, p;
// Assemble q;
// p = (Assemble) malloc (sizeof(Lnode));
// pa = p;
// q = head->next;
// while(q)
// {
// p = (Assemble) malloc (sizeof(Lnode));
// p->data = q->data;
// pa->next = p;
// q = q->next;
// }
// p->next = NULL;
}
int List::display()//输出集合元素
{
cout<<"集合:";
Assemble p;
p = head->next;
if(!p)
{
cout<<"空";
return ERROR;
}
while(p)
{
cout<<p->data<<" ";
p = p->next;
}
return OK;
}
Assemble Intersection(List L1, List L2, List L1_2)//求并集
{
Assemble head1, head2, head1_2;
head1 = L1.head;
head2 = L2.head;
head1_2 = L1_2.head;
Assemble p, q;
head1_2 = p = head1;
while(p->next)
{
p = p->next;
}
p->next = head2->next;
while(p->next)
{
p = p->next;
}
p->next = NULL;
L1_2.head = head1_2;
L1_2.Remove_Duplicate();
return L1_2.head;
}
Assemble Union_Xor(List L1, List L2,List L12)//求交集与异或
{
Assemble head1, head2, head12;
head1 = L1.head;
head2 = L2.head;
head12 = L12.head;
cout<<"交集集合:";
Assemble p, q;
p = head1;
q = head2;
if(p->next&&q->next)
{
while(p->next)
{
p = p->next;
q = head2->next;
while(q)
{
if(q->data == p->data)
{cout<<p->data<<" "; break;}
q = q->next;
}
}
cout<<endl;
}
else cout<<"空集"<<endl;
cout<<"异或集合:";
int num;
p = head1;
q = head2;
if(p->next&&q->next)
{
while(p->next)
{ num=0;
p = p->next;
q = head2->next;
while(q)
{
if(q->data == p->data) num=1;
q = q->next;
}
if(num==0) cout<<p->data<<" ";
}
}
p = head1;
q = head2;
if(p->next&&q->next)
{
while(q->next)
{
num=0;
q = q->next;
p = head1->next;
while(p)
{
if(p->data == q->data) num=1;
p = p->next;
}
if(num==0) cout<<q->data<<" ";
}
}
p = head1;
q = head2;
if(p->next&&!q->next)
{
p = p->next;
while(p)
{
cout<<p->data<<" ";
p = p->next;
}
}
p = head1;
q = head2;
if(!p->next&&q->next)
{
q = q->next;
while(q)
{
cout<<q->data<<" ";
q = q->next;
}
}
p = head1;
q = head2;
if(!p->next&&!q->next)
{
cout<<"空集";
}
cout<<endl;
return head12;
}
int Show()
{
List L1, L2, L12, L1_2;
Assemble h;
/*初始化A*/
cout<<"A集合:"<<endl;
L1.Init_Assemble();
L1.Input_Assemble();
L1.Remove_Duplicate();
L1.display();
cout<<endl<<endl;
/*初始化B*/
cout<<"B集合:"<<endl;
L2.Init_Assemble();
L2.Input_Assemble();
L2.Remove_Duplicate();
L2.display();
cout<<endl<<endl;
/*A ∩B与(A-B)(B-A)*/
L12.Init_Assemble();
Union_Xor(L1, L2, L12);
/*A ∪B*/
L1_2.Init_Assemble();
h = Intersection(L1, L2, L1_2);
L1_2.Gethead(h);
cout<<"并集";
L1_2.display();
cout<<endl<<endl;
return 0;
}
int main()
{
Show();
return 0;
}
数据结构实验代码集合A、B的三个运算.rar
需积分: 5 44 浏览量
2024-05-01
20:32:34
上传
评论
收藏 354KB RAR 举报
温柔-的-女汉子
- 粉丝: 1026
- 资源: 4013