程序实践系列使用类设计整数集合类
Posted 松子茶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序实践系列使用类设计整数集合类相关的知识,希望对你有一定的参考价值。
设计整数集合类Set,该类包括以下数据成员:
int elem[N]; //存放集合元素
int num; //集合中最后一个元素位置
和以下成员函数:
Set(); //默认构造函数
Set(int a[],int s); //以数组a的元素和位置s构造一个集合
void empty(); //清空集合
int isempty(); //判断是否为空集合
int member(inta); //判断a是否为集合元素
int add(int a); //将a添加到集合中
int sub(int a); //从集合中删除元素a
int equ(Set&set); //判断两集合是否相等
Set intersection(Set&set); //求两个集合的交集
Set merge(Set &set); //求两个集合的并集
void copy(Set&set); //集合复制
void disp(); //输出集合元素
对应的参考程序如下所示:
#include <iostream.h>
const int N=100; //最多元素个数
class Set
int elem[N]; //存放集合元素
int num; //集合中最后一个元素位置 public:
Set();
Set(int a[],int s);
void empty();
int isempty();
int member(int a);
int add(int a);
int sub(int a);
int equ(Set &set);
Set intersection(Set &set);
Set merge(Set & set);
void copy(Set &set);
void disp();
;
Set::Set() //默认构造函数
int i;
for (i=0;i<N;i++)
elem[i]=0;
num=-1;
Set::Set(inta[],int s) //构造函数,要求a数组中的元素互不相同
int i;
if (s>=100)
num=99;
else
num=s-1;
for (i=0;i<=num;i++)
elem[i]=a[i];
for (i=s;i<N;i++)
elem[i]=0;
void Set::empty() //清空一个集合
int i;
for (i=0;i<N;i++)
elem[i]=0;
num=-1;
int Set::isempty() //判断是否为空集合
if (num==-1) return 1;
else return 0;
int Set::member(int a) //判断a是否为集合的元素
int i;
for (i=0;i<=num;i++)
if (elem[i]==a) return 1;
return 0;
int Set::add(int a) //将一个集合添加到集合中
if (member(a))
return 1;
else if (num==N-1)
return 0;
else
num++;
elem[num]=a;
return 1;
int Set::sub(int a) //从集合中删除元素a
int i,p;
if (!member(a)) //a不是集合元素时返回0
return 0;
for (i=0;i<=num;i++) //找到a所在的位置p
if (elem[i]==a)
p=i;break;
for (i=p;i<num;i++) //位置p及之后所有元素前移一位
elem[i]=elem[i+1];
num--; //位置减1
return 1;
int Set::equ(Set &set) //判断两个集合是否相等
int i;
if (num!=set.num) //长度不等时返回0
return 0;
for (i=0;i<=num;i++) //判断每个元素是否都在set中
if (set.member(elem[i])==0) return 0;
return 1;
Set Set::intersection(Set &set) //求两个集合的交集
int a[N],k=0,i,j;
for (i=0;i<=num;i++) //扫描当前集合中所有元素
for (j=0;j<=set.num;j++)
if (elem[i]==set.elem[j]) //将属于两个集合的元素放在a数组中
a[k++]=elem[i];
break;
return Set(a,k); //调用构造函数产生一个无名对象返回
Set Set::merge(Set &set) //求两个集合的并集
int a[N],i,k;
for (i=0;i<=num;i++) //先将当前集合元素放入a数组中
a[i]=elem[i];
k=num+1;
for (i=0;i<=set.num;i++) //将集合set中不在当前集合中的元素放入a数组中
if (member(set.elem[i])) continue;
else
if (k==N-1) break;
a[k++]=set.elem[i];
return Set(a,k); //调用构造函数产生一个无名对象返回
void Set::copy(Set &set) //集合复制
int i;
for (i=0;i<=set.num;i++)
elem[i]=set.elem[i];
num=set.num;
void Set::disp() //输出集合所有元素
int i;
for (i=0;i<=num;i++)
cout << elem[i] << " ";
cout << endl;
void main()
int a[]=2,5,1,8,7,b[]=5,7,2,9;
Set s1(a,4),s2(b,4),s3,s4,s5;
cout << "集合s1:";s1.disp();
cout << "集合s2:";s2.disp();
cout << "向集合s1中添加元素10" << endl;
s1.add(10);
cout << "集合s1:";s1.disp();
cout << "集合s2中删除元素9" << endl;
s2.sub(9);
cout << "集合s2:";s2.disp();
cout << "集合s1和s2" << (s1.equ(s2)?"相同":"不相同") << endl;
s3=s1.intersection(s2);
cout << "集合s1和s2的交:";
s3.disp();
s4=s1.merge(s2);
cout << "集合s1和s2的并:";
s4.disp();
cout << "将集合s2复制到s5" << endl;
s5=s2;
cout << "集合s5:";s5.disp();
以上是关于程序实践系列使用类设计整数集合类的主要内容,如果未能解决你的问题,请参考以下文章