#include<iostream>
using namespace std;
#include<stdlib.h>
typedef struct LNode//定义结构体类型指针
{
char data;
struct LNode *next;
}*linklist;
void in_put(linklist &L)//定义输入集合函数
{
linklist p;
char tmp=cin.get();
while(tmp!='\n')
{ p=(linklist)malloc(sizeof(struct LNode));
p->data=tmp;
p->next=L->next;//函数调用完后不会改变指针L的值,只会改变指针L所指向的内容(即L->next的值)
L->next=p;
tmp=cin.get();
}
}
void out_put(linklist L)//定义输出集合函数
{
linklist p;
p=L->next;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
cout<<"\n";
}
void bingji(linklist L1,linklist L2,linklist L3)//定义并集,L3为L1和L2的并集
{
linklist p1;
linklist p2;
linklist p3;
p1=L1->next;
while(p1!=NULL)//将L1中的数据传给L3
{
p3=(linklist)malloc(sizeof(struct LNode));
p3->data=p1->data;
p3->next=L3->next;
L3->next=p3;
p1=p1->next;
}
p2=L2->next;
while(p2!=NULL)//循环处理L2中数据
{
p1=L1->next;
while((p1!=NULL)&&(p1->data!=p2->data))
p1=p1->next;
if (p1==NULL)//L1中的所有节点的数据都与L2中的第i(i=1,2...)个数据不相等,那么将L1中的第n个数据传给L3
{
p3=(linklist)malloc(sizeof(struct LNode));
p3->data=p2->data;
p3->next=L3->next;
L3->next=p3;
}
p2=p2->next;
}
}
void jiaoji(linklist L1,linklist L2,linklist L3)//定义交集,L3为L1和L2交集
{
linklist p1,p2,p3;
p1=L1->next;
while(p1!=NULL)//同样的循环处理L2中的数据
{
p2=L2->next;
while((p2!=NULL)&&(p2->data!=p1->data))
p2=p2->next;
if((p2!=NULL)&&(p2->data==p1->data))//存在L2中的数据与L1中的第n个数据相等
{
p3=(linklist)malloc(sizeof(struct LNode));
p3->data=p1->data;//这里就将 L1与L2相等的数据传给L3
p3->next=L3->next;
L3->next=p3;
}
p1=p1->next;
}
}
void chaji(linklist L1,linklist L2,linklist L3)//同上面相同的定义差集,L3为L1和L2差集
{
linklist p1,p2,p3;
p1=L1->next;
while(p1!=NULL)//循环处理L1中的数据
{
p2=L2->next;//从第一个节点开始处理
while((p2!=NULL)&&(p2->data!=p1->data))
p2=p2->next;
if(p2==NULL)//在L2中没有找到数据与L1中第n个数据相等
{
p3=(linklist)malloc(sizeof(struct LNode));
p3->data=p1->data;
p3->next=L3->next;
L3->next=p3;//将L1中数据传给L3(与L2不相等)
}
p1=p1->next;
}
}
bool judge(linklist L,char n)//判断n是否在集合A中
{
int t=0;
linklist p=L->next;
while(p!=NULL)
{
if(p->data==n)
t=1;
p=p->next;
}
if(t==0) return false;
else return true;
}
int main()//主函数
{
int x;
char m;
linklist L1,L2,L3;
L1=(linklist)malloc(sizeof(struct LNode));
L1->next=NULL;
L2=(linklist)malloc(sizeof(struct LNode));
L2->next=NULL;
L3=(linklist)malloc(sizeof(struct LNode));
L3->next=NULL;
cout<<"请输入集合A:";
in_put(L1);
cout<<"请输入集合B:";
in_put(L2);
do
{cout<<"1.求两集合的并集\n";
cout<<"2.求两集合的交集\n";
cout<<"3.求两集合的差集\n";
cout<<"4.输入一个数n,查找n是否属于集合A\n";
cout<<"0.退出程序\n";
cin>>x;
switch(x)
{case 1:
cout<<"两集合的并是";
bingji(L1,L2,L3);//并集
out_put(L3);
L3->next=NULL;
break;
case 2:
cout<<"两集合的交是";
jiaoji(L1,L2,L3);//交集
out_put(L3);
L3->next=NULL;
break;
case 3:
cout<<"两集合的差是";
chaji(L1,L2,L3);//差集
out_put(L3);
L3->next=NULL;
break;
case 4:
cout<<"请输入一个元素n:"<<"\n";
cin>>m;
if(judge(L1,m))
cout<<"n这个元素属于集合A"<<"\n";
else
cout<<"n这个元素不属于集合A"<<"\n";
break;
case 5:
break;
default:
cout<<"选择错误,请重新输入\n";
break;}
}
while(5!=0);
}
using namespace std;
#include<stdlib.h>
typedef struct LNode//定义结构体类型指针
{
char data;
struct LNode *next;
}*linklist;
void in_put(linklist &L)//定义输入集合函数
{
linklist p;
char tmp=cin.get();
while(tmp!='\n')
{ p=(linklist)malloc(sizeof(struct LNode));
p->data=tmp;
p->next=L->next;//函数调用完后不会改变指针L的值,只会改变指针L所指向的内容(即L->next的值)
L->next=p;
tmp=cin.get();
}
}
void out_put(linklist L)//定义输出集合函数
{
linklist p;
p=L->next;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
cout<<"\n";
}
void bingji(linklist L1,linklist L2,linklist L3)//定义并集,L3为L1和L2的并集
{
linklist p1;
linklist p2;
linklist p3;
p1=L1->next;
while(p1!=NULL)//将L1中的数据传给L3
{
p3=(linklist)malloc(sizeof(struct LNode));
p3->data=p1->data;
p3->next=L3->next;
L3->next=p3;
p1=p1->next;
}
p2=L2->next;
while(p2!=NULL)//循环处理L2中数据
{
p1=L1->next;
while((p1!=NULL)&&(p1->data!=p2->data))
p1=p1->next;
if (p1==NULL)//L1中的所有节点的数据都与L2中的第i(i=1,2...)个数据不相等,那么将L1中的第n个数据传给L3
{
p3=(linklist)malloc(sizeof(struct LNode));
p3->data=p2->data;
p3->next=L3->next;
L3->next=p3;
}
p2=p2->next;
}
}
void jiaoji(linklist L1,linklist L2,linklist L3)//定义交集,L3为L1和L2交集
{
linklist p1,p2,p3;
p1=L1->next;
while(p1!=NULL)//同样的循环处理L2中的数据
{
p2=L2->next;
while((p2!=NULL)&&(p2->data!=p1->data))
p2=p2->next;
if((p2!=NULL)&&(p2->data==p1->data))//存在L2中的数据与L1中的第n个数据相等
{
p3=(linklist)malloc(sizeof(struct LNode));
p3->data=p1->data;//这里就将 L1与L2相等的数据传给L3
p3->next=L3->next;
L3->next=p3;
}
p1=p1->next;
}
}
void chaji(linklist L1,linklist L2,linklist L3)//同上面相同的定义差集,L3为L1和L2差集
{
linklist p1,p2,p3;
p1=L1->next;
while(p1!=NULL)//循环处理L1中的数据
{
p2=L2->next;//从第一个节点开始处理
while((p2!=NULL)&&(p2->data!=p1->data))
p2=p2->next;
if(p2==NULL)//在L2中没有找到数据与L1中第n个数据相等
{
p3=(linklist)malloc(sizeof(struct LNode));
p3->data=p1->data;
p3->next=L3->next;
L3->next=p3;//将L1中数据传给L3(与L2不相等)
}
p1=p1->next;
}
}
bool judge(linklist L,char n)//判断n是否在集合A中
{
int t=0;
linklist p=L->next;
while(p!=NULL)
{
if(p->data==n)
t=1;
p=p->next;
}
if(t==0) return false;
else return true;
}
int main()//主函数
{
int x;
char m;
linklist L1,L2,L3;
L1=(linklist)malloc(sizeof(struct LNode));
L1->next=NULL;
L2=(linklist)malloc(sizeof(struct LNode));
L2->next=NULL;
L3=(linklist)malloc(sizeof(struct LNode));
L3->next=NULL;
cout<<"请输入集合A:";
in_put(L1);
cout<<"请输入集合B:";
in_put(L2);
do
{cout<<"1.求两集合的并集\n";
cout<<"2.求两集合的交集\n";
cout<<"3.求两集合的差集\n";
cout<<"4.输入一个数n,查找n是否属于集合A\n";
cout<<"0.退出程序\n";
cin>>x;
switch(x)
{case 1:
cout<<"两集合的并是";
bingji(L1,L2,L3);//并集
out_put(L3);
L3->next=NULL;
break;
case 2:
cout<<"两集合的交是";
jiaoji(L1,L2,L3);//交集
out_put(L3);
L3->next=NULL;
break;
case 3:
cout<<"两集合的差是";
chaji(L1,L2,L3);//差集
out_put(L3);
L3->next=NULL;
break;
case 4:
cout<<"请输入一个元素n:"<<"\n";
cin>>m;
if(judge(L1,m))
cout<<"n这个元素属于集合A"<<"\n";
else
cout<<"n这个元素不属于集合A"<<"\n";
break;
case 5:
break;
default:
cout<<"选择错误,请重新输入\n";
break;}
}
while(5!=0);
}