建造集合类实训
题目:设计一个表示整数型数据的集合类,可以对集合中数据进行添加,删除,可以判断一个整数是否在这个集合里,可以求出集合数据的多少,可以判断集合的空和满,空集合就是没有数据元素,满集合是数据元素以及占满给出的储存单元。两个集合就可以做交运算,就是将两个集合的公有数据组成一个新的集合。两个集合可以做并运算,就是将两个集合的所有数据组成一个新的集合。
实训要求:
1.分析集合累的数据属性要求。
2.分析集合类的操作属性要求,
3.编制集合类的接口定义。
4.实现集合类的属性函数。
需要建造类,类中实现对应功能的函数,每个功能都是独立的,不需要类的继承。但要注意Jihe类的构造函数需要初始计数的a。
代码
#include<iostream>
#include<string.h>
#include<cmath>
using namespace std;
class Jihe{
public:
Jihe(){a=0;};
Jihe(int * ,int x=0){ memset(array,0,sizeof(array)) ;a=x;}
int Sum() { return a;}
void Display();
void Add(int);
void Delete( int );
void Empty();
void Full();
void Intersection(Jihe );
void Union( Jihe );
private:
int array[1001];
int a;
};
void Jihe::Display(){
cout<<"集合中数据的个数" <<Sum()<<endl;
for(int i=0; i<=a-1; i++)
cout << array[i];
cout << endl<< "输出完毕" << endl;
}
void Jihe::Add(int m){
int flag=0;
cout << a<< endl;
if(a==1001) cout << "集合已经满了" <<endl;
else {
for(int i=0; i<=a-1;i++)
if(array[i]==m) flag=1;
}
if(flag==0) {
array[a++]=m;
cout << "添加成功" << endl;
}
else cout << "该数据已经存在无需添加" <<endl;
}
void Jihe::Delete(int m){
int flag=0;
int i;
if(a==0) cout << "集合为空无需删除"<<endl;
else {
for(i=0; i<=a-1; i++)
if(array[i]==m) {flag=1; break;}
}
if(flag==1) {
array[i]=array[a-1];
a--;
}
else cout << "集合中无这个数" << endl;
}
void Jihe::Empty(){
if(a==0) cout << "集合为空集合"<< endl;
}
void Jihe::Full(){
if(a==1001) cout << "集合为满集合"<< endl;
}
void Jihe::Intersection( Jihe A){
Jihe result;
int k=0;
for(int i=0; i<=a-1; i++)
for(int j=0; j<=A.a-1; j++)
if(array[i]==A.array[j])
{
result.array[k++]=array[i];
break; //找出a中与本集合相同的数跳出A集合的历编,再进行下一个成员的寻找
}
cout << "相交的两个集合分别为"<<endl;
cout << "原集合" ; Display();
cout << "与之相交的集合"; A.Display();
cout << endl;
cout << " 相交后的集合公有数据:"<<k<< "个"<<endl;
for( i=0 ;i<=k-1; i++)
cout << result.array[i];
cout << endl;
}
//并集
void Jihe::Union( Jihe A){
int k=0;
for(int j=0; j<=A.a-1; j++)
{ int flag=0;
for(int i=0; i<=a-1; i++)
if(array[i]==A.array[j]) flag=1;
if(flag==0) array[a++]=A.array[j];
}
cout << "相并的两个集合分别为"<<endl;
Display();
cout << endl;
}
void main()
{
Jihe A,B;
int k,j,x[5];
cout << "输入5个数据"<<endl;
for(int i=0; i<5; i++){
cin>>x[i];
A.Add(x[i]);
}
A.Display();
cout<<"请输入要添加的数据:";
cin>>j;
A.Add(j);
cout<<"集合1现在包含的数据:"<<endl;
A.Display();
cout<<"请输入要删除的数据:";
cin>>k;
A.Delete(k);
cout<<"集合1现在包含的数据:"<<endl;
A.Display();
cout<<endl;
cout<<"请向集合2中输入五个数据:";
for( i=0;i<5;i++)
{
cin>>x[i];
B.Add(x[i]);
}
cout<<"集合2现在包含的数据:"<<endl;
B.Display();
A.Intersection(B);
A.Union(B);
}