题目描述:
请设计实现集合类,元素类型为整形。该集合类支持集合元素增加、删除、查询;并支持集合并、交、差运算(作为类成员函数),;利用你设计的集合类,实现本题要求。程序应体现面向对象程序设计思想,结构合理。为保证结果唯一,集合元素递增排列。假设集合元素个数不超100个。要求并、交、差运算结果先保存在集合对象内(如需要可继续参加集合运算),再利用集合显示功能显示。集合元素保存在数组中。
输入描述:
开始为两个正整数m,n;后续m个整数构成集合A,再后续n个整数构成集合B。
输出描述:
集合A、B和他们的并、交、差集;每个集合元素间以,分隔;不同集合显示在不同行。
输入样例:
3 5
1 2 3
3 5 8 2 1
输出样例:
{1,2,3}
{1,2,3,5,8}
{1,2,3,5,8}
{1,2,3}
{}
——————————————————————————————————————
代码:
#include <iostream>
using namespace std;
class Set
{
int e[100];
int num;
public:
Set():num(0){}
bool Insert(int a);
bool Delete(int a);
bool Check(int a);
Set operator +(Set B);
Set operator *(Set B);
Set operator -(Set B);
void Show();
};
bool Set::Insert(int a)
{
int i;
for (i=num-1;i>=0;i--)
{
if (e[i]>a) e[i+1]=e[i];
else if(e[i]==a) return false;
else break;
}
e[i+1]=a;
num++;
return true;
}
bool Set::Delete(int a)
{
int i,j;
for (i=0;i<num;i++)
if (e[i]==a)
{
for (j=i;j<num-1;j++)
e[j]=e[j+1];
num--;
return true;
}
return false;
}
bool Set::Check(int a)
{
int i;
for (i=0;i<num;i++)
if(e[i]==a)
return true;
return false;
}
Set Set::operator +(Set B)
{
Set C;
int i,j,k;
i=j=k=0;
while (i<num&&j<B.num)
{
if (e[i]<B.e[j])
C.e[k++]=e[i++];
else if (e[i]>B.e[j])
C.e[k++]=B.e[j++];
else
{
C.e[k++]=e[i++];
j++;
}
}
while (i<num)
C.e[k++]=e[i++];
while (j<B.num)
C.e[k++]=B.e[j++];
C.num=k;
return C;
}
Set Set::operator *(Set B)
{
Set C;
int i,j,k;
i=j=k=0;
while(i<num&&j<B.num)
{
if (e[i]<B.e[j])
i++;
else if (e[i]>B.e[j])
j++;
else
{
C.e[k++]=e[i++];
j++;
}
}
C.num=k;
return C;
}
Set Set::operator -(Set B)
{
Set C;
int i,j,k;
i=j=k=0;
while (i<num&&j<B.num)
{
if (e[i]<B.e[j])
C.e[k++]=e[i++];
else if (e[i]>B.e[j])
j++;
else
{
i++; j++;
}
}
while(i<num)
C.e[k++]=e[i++];
C.num=k;
return C;
}
void Set::Show()
{
cout << "{";
int i;
if (num)
cout <<e[0];
for(i=1;i<num;i++)
cout << "," << e[i];
cout << "}" <<endl;
}
int main()
{
int m,n,i,k;
Set A,B,C;
cin >> m >> n;
for (i=0;i<m;i++)
{
cin >> k;
A.Insert(k);
}
for (i=0;i<n;i++)
{
cin >> k;
B.Insert(k);
}
A.Show();
B.Show();
C=A+B;
C.Show();
C=A*B;
C.Show();
C=A-B;
C.Show();
return 0;
}
小结:
- 用重载运算符实现交并差