资源简介
c++ , 链表实现 : 集合的交叉并运算。
并集
两个集合可以相"加"。A和B的并集是将A和B的元素放到一起构成的新集合。给定集合A,B,定义运算∪如下:A∪B = {e|e∈A 或 e∈B}。A∪B称为A和B的并集。
交集
一个新的集合也可以通过两个集合"共"有的元素来构造。A和B的交集,写作A∩B,是既属于A的、又属于B的所有元素组成的集合。若A∩B={\displaystyle \varnothing },则A和B称作不相交。
差集
两个集合也可以相"减"。A在B中的相对补集,写作B−A,是属于B的、但不属于A的所有元素组成的集合。在特定情况下,所讨论的所有集合是一个给定的全集U的子集。这样,U−A称作A的绝对补集,或简称补集(余集),写作A′或CUA。补集可以看作两个集合相减,有时也称作差集。
代码片段和文件信息
#include
using namespace std;
struct Node {
int data;
Node *next; //表示数据元素之间逻辑关系的指针
};
class linkList {
Node*head; //链表只要知道头在哪里,就可以通过指针找到全部的
public :
// 生成带头结点的空链表
linkList() {
head=new Node; // 动态分配一个结点空间
head->next=NULL; // 生成带头结点的空链表
}
//创建链表
int Create_List() {
cout<<“\n---输入元素的个数:“;
int n;
cin>>n;
cout<<“\n---输入元素:“;
Node *tail=head;//tail记下当前链表的尾巴结点
for(int i=1; i<=n; i++) {
int e;
cin>>e;
Node *s=new Node;
s->data=e;
s->next=NULL;
tail->next=s;
tail=s;
}
cout< }
void Insert_first(int x) {
Node*s=new Node;
s->data=x;
s->next=head->next;
head->next=s;
}
int search(int xNode *&px) {
Node*p=head->next;
int count=1;
while(p!=NULL) {
if(p->data == x ) {
px=p;
return count;
}
p=p->next;
count++;
}
return 0;
}
//显示链表
void display() {
Node *p=head->next;
if(p==NULL) {
cout<<“空表\n“;
return;
}
while(p!=NULL) {
cout<data<<“ “;
p=p->next;
}
cout< }
static linkList bin( linkList A linkList B) {
linkList result;
Node *p=(A.head)->next;
while(p!=NULL) {
result.Insert_first(p->data);
p=p->next;
}
p=(B.head)->next;
while(p!=NULL ) {
Node * px;
if(A.search(p->datapx)==0 )
result.Insert_first(p->data);
p=p->next;
}
return result;
}
static linkList jiao( linkList A linkList B) {
linkList result;
Node *p=(A.head)->next;
while(p!=NULL) {
Node * px;
if(B.search(p->datapx)!=0 )
result.Insert_first(p->data);
p=p->next;
}
return result;
}
static linkList jian(linkList A linkList B) {
linkList result;
Node *p=(A.head)->next;
while(p!=NULL) {
Node * px;
if(B.search(p->datapx)==0 )
result.Insert_
- 上一篇:一元多项式运算器
- 下一篇:C语言实现的DES加密算法
评论
共有 条评论