首先我们定义
struct List{ //构建链表 的定义
int a[MAX];
int length;
};
顺序表的构建:
void setlist(List &L,int n){ //链表的构建 并输入
L.length=n;
for(int i=0;i<L.length;i++){
scanf("%d",&L.a[i]);
}
}
void inputlist(List &L,int n){ //构建链表的输出
L.length=n;
for(int i=0;i<L.length;i++){
printf("%d\n",L.a[i]);
}
}
两个集合的并集:
void bingji(List L1,List L2,List &L3){ //两个表的并集
int i=0,j=0,k=0;
while(i<=L1.length-1&&j<=L2.length-1){
if(L1.a[i]<=L2.a[j]){
L3.a[k++]=L1.a[i++];
}
else L3.a[k++]=L2.a[j++];
}
while(i<L1.length){
L3.a[k++]=L1.a[i++];
}
while(j<L2.length){
L3.a[k++]=L2.a[j++];
}
L3.length=L1.length+L2.length;
for(int m=0;m<L3.length-1;m++){ //遍历数组的元素
for(int n=m+1;n<L3.length;){ //遍历第二个元素 到最后元素
//判断是否满足条件
if(L3.a[m]==L3.a[n]){
for(int y=n;y<L3.length-1;y++){
L3.a[y]=L3.a[y+1];
}
L3.length--;
}
else {
n++;
}
}
}
printf("两个表的并集:");
for(int x=0;x<=L3.length-1;++x){
printf("%d",L3.a[x]);
}
两个集合的交集:
void Intersection(List l1,List l2,List &l3) { //两个表交集的实现
int k=0;
for(int i=0;i<l1.length;i++){
for(int j=0;j<l2.length;j++){
if(l1.a[i]==l2.a[j]){
l3.a[k]=l1.a[i];
k++;
}
}
}
l3.length=k;
if(l3.length==0) {
printf("没有交集");
}
else{
printf("两个表的交集:");
for(int q=0;q<l3.length;q++){
printf("%d",l3.a[q]);
}
}
}
两个集合的差集:
void except(List L1,List L2,List &L3){ /*两个表的差集 由所有属于A且不属于B的元素组成的 */
int k=0;
for(int i=0;i<L1.length;i++){
int flage=0;
for(int j=0;j<L2.length;j++){
if(L1.a[i]==L2.a[j]){
flage++;
break;
}
}
if(flage==0){
L3.a[k]=L1.a[i];
k++;
}
}
L3.length=k;
printf("两个表的差集:");
for(int q=0;q<L3.length;q++){
printf("%d",L3.a[q]);
}
}
希望能帮助大家!