#include <malloc.h>
#include <stdlib.h>
#define LISTINCREAMENT 10
typedef struct status
{
int *elem
int length
int listsize
int incrementsize
}SqList
void AuB(SqList A,SqList B,SqList &C)
void AnB(SqList A,SqList B,SqList &D)
void A_B(SqList &A,SqList B)
int GetElem(SqList L,int i)
int LocateElem(SqList L,int e)
void ListDelete(SqList &A,int i)
void main()
{
SqList A,B,C,D
int i,a,b
printf("输入集合A的元素个数:a = ")
scanf("%d",&a)
printf("输入集合B的元素个数:b = ")
scanf("%d",&b)
A.elem = (int *)malloc(a*sizeof(int))
B.elem = (int *)malloc(b*sizeof(int))
C.elem = (int *)malloc((a>b?a:b)*sizeof(int))
D.elem = (int *)malloc((a<b?a:b)*sizeof(int))
if(!A.elem || !B.elem || !C.elem || !D.elem)
{
printf("error!")
exit(0)
}
else
{
A.length = 0
A.listsize = a
B.length = 0
B.listsize = b
C.length = 0
C.listsize = (a>b)?a:b
D.length = 0
D.listsize = (a<b)?a:b
}
printf("高陵输入集合A的元素仔指:念念配")
for(i = 0i <ai++)
{
scanf("%d",(A.elem+i))
A.length++
}
printf("输入集合B的元素:")
for(i = 0i <bi++)
{
scanf("%d",(B.elem+i))
B.length++
}
AuB(A,B,C)
AnB(A,B,D)
A_B(A,D)
}
//定义函数A并B
void AuB(SqList A,SqList B,SqList &C)
{
int i,j,k,e,*newbase
for(i = 0i <A.lengthi++)
{
C.elem[i] = A.elem[i]
C.length++
}
for(j = 0j <B.lengthj++)
{
e = GetElem(B,j)
k = LocateElem(C,e)
if(k == 0)
{
if((C.length) >= C.listsize)//扩容
{
newbase = (int *)realloc(C.elem,(C.listsize+LISTINCREAMENT)*sizeof(int))
if(!newbase)
exit(0)
C.elem = newbase
C.listsize += LISTINCREAMENT
}
C.elem[C.length] = B.elem[j]
C.length++
}
}
printf("A B的并集C = {")
for(k = 0k <C.lengthk++)
printf("%d ",*(C.elem+k))
printf("}\n")
}
//定义函数A交B
void AnB(SqList A,SqList B,SqList &D)
{
int i,k,t,*p
p = D.elem
for(i = 0i <A.lengthi++)
{
t = GetElem(A,i)
k = LocateElem(B,t)
if(k >0)
{
*p++ = t
D.length++
}
}
if(D.length==0)
printf("A B的交集为空集\n")
else
{
printf("A B的交集为C = {")
for(i = 0i <D.lengthi++)
printf("%d ",*(D.elem+i))
printf("}\n")
}
}
//定义函数A B差集
void A_B(SqList &A,SqList D)
{
int i,k,e
for(i = 0i <D.lengthi++)
{
e = GetElem(D,i)
k = LocateElem(A,e)
ListDelete(A,k)
}
if(A.length == 0)
printf("A B的差集为空集\n")
else
{
printf("A B的差集为E = {")
for(i = 0i <A.lengthi++)
printf("%d ",*(A.elem+i))
printf("}\n")
}
}
void ListDelete(SqList &A,int i)
{
int *p,*q
if(i <0 || i >A.length)
{
printf("error")
exit(0)
}
p = A.elem+i-1
q = A.elem+A.length-1
for(++pp <= q++p)
*(p-1) = *p
--A.length
}
int GetElem(SqList L,int j)
{
if(j<0||j>L.length)
printf("error")
return *(L.elem+j)
}
int LocateElem(SqList L,int e)
{
int i
for(i = 0i <L.lengthi++)
{
if(e==*(L.elem+i))
return i+1
}
return 0
}
#include <stdio.h>#include <stdlib.h>
#include <iostream>
using namespace std
//交集
void Intersection(int a[], int b[], int m, int n)
{
cout<<"两集合交集:"
for(int i = 0i <mi++)
{
for(int j = 0j <nj++)
{
if(a[i] == b[j])
{
cout<<a[i]<<' '
break
}
}
}
cout<<endl
}
//并集
void AddSets(int a[], int b[], int m, int n)
{
int flag
cout<<"两集合并集:"
for(int i = 0i <mi++)
{
flag = true
for(int j = 0j <nj++)
{
if(a[i] == b[j])
{
flag = false
break
}
}
if(flag) cout<<a[i]<<' '
}
for(int j = 0j <塌姿 nj++)
{
cout<<b[j]<<' '
}
cout<<endl
}
//差集
void SubSets(int a[], int b[], int m, int n)
{
int flag
cout<<"两集合差集:"
for(int i = 0i <mi++)
{
flag = true
for(int j = 0j <nj++)
{
if(a[i] == b[j])
{
flag = false
break
}
}
if(flag) cout<<a[i]<<' '
}
cout<<endl
}
void main()
{
int n1
int n2
int a[100]
int b[100]
cout<<"请输入第一个数组大小:"
cin>>n1
cout<<"请输入第一个数组元素:"
for (int i = 0i <n1i++)
{
cin>>a[i]
}
cout<<"请输氏衫凳入第二个数组大小:"
cin>>n2
cout<<"请输歼旅入第二个数组元素:"
for (i = 0i <n2i++)
{
cin>>b[i]
}
Intersection(a, b, n1, n2)
AddSets(a, b, n1, n2)
SubSets(a, b, n1, n2)
getchar()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)