发布网友 发布时间:2023-07-05 00:14
共1个回答
热心网友 时间:2024-08-26 17:50
//看看符合你要求不?
#include <iostream>
using namespace std;
const int Max=100;
//------------------------------------------------------
class Set
{
unsigned int len;
int Elem[Max];
public:
//Constructor
Set();
Set(const Set & SetObj);
inline bool isFull() const;
inline bool isEmpty() const;
inline unsigned int size() const;
inline int isMemberOf(int nElem) const;//返回位置
bool addElem(int nElem);
bool delElem(int nElem);
Set Union(const Set & SetB);
Set InSection(const Set & SetB);
void display() const;
void Input();
};
//------------------------------------------------------
Set::Set():len(0){}
//------------------------------------------------------
Set::Set(const Set & SetObj)
{
for (len = 0;len < SetObj.len;len++)
{
Elem[len] = SetObj.Elem[len];
}
}
//------------------------------------------------------
unsigned int Set::size() const
{
return len;
}
//------------------------------------------------------
bool Set::isEmpty() const
{
return len == 0;
}
//------------------------------------------------------
bool Set::isFull() const
{
return len == Max;
}
//------------------------------------------------------
int Set::isMemberOf(int nElem) const
{
for (int index = 0; index < len; index++)
{
if (Elem[index] == nElem) return index + 1;
}
return -1;
}
//-------------------------------------------------------
void Set::display() const
{
for (int index = 0; index < len;index++)
cout<<Elem[index]<<" ";
cout<<endl;
}
//-------------------------------------------------------
//添加和删除元素操作
//-------------------------------------------------------
bool Set::addElem(int nElem)
{
if (isFull()) return false;
else if (isMemberOf(nElem)!= -1){}//Do nothing
else
{
Elem[len++] = nElem;
}
return true;
}
//--------------------------------------------------------
bool Set::delElem(int nElem)
{
int loc = isMemberOf(nElem);
if (isEmpty()||(loc == -1)) return false;
for (int index = loc; index < len; index++)
{
Elem[index - 1] = Elem[index];
}
len--;
return true;
}
//--------------------------------------------------------
//求交集(InSection)与并集(Union)
//--------------------------------------------------------
Set Set::Union(const Set & SetB)
{
//注意:没有考虑溢出的情况
Set SetC(SetB);
for (int index = 0;index < len;index++)
SetC.addElem(Elem[index]);
return SetC;
}
//------------------------------------------------------------
Set Set::InSection(const Set & SetB)
{
Set SetC;
for (int index = 0;index < len;index++)
{
for (int indexB = 0;indexB < SetB.len;indexB++)
{
if (Elem[index] == SetB.Elem[indexB])
SetC.addElem(Elem[index]);
}
}
return SetC;
}
//--------------------------------------------------------------
void Set::Input()
{
int nSize;
cout<<"请输入集合的大小:\n";
cin>>nSize;
if (nSize > Max) return;
cout<<"请输入集合元素!\n";
for (int i = 0,elem; i < nSize ;i++)
{
cin>>elem;
addElem(elem);
}
}
//---------------------------------------------------------------
int main()
{
int n;
Set A,B,C;
cout<<"A";
A.Input();
cout<<"B";
B.Input();
cout<<"A=";
A.display();
cout<<"B=";
B.display();
cout<<"A∩B=";
C=A.InSection(B);
C.display();
cout<<"A∪B=";
C=A.Union(B);
C.display();
cout<<"从A中选择要删除的元素:";
cin>>n;
A.delElem(n);
cout<<"A=";
A.display();
cout<<"从B中选择要删除的元素:";
cin>>n;
B.delElem(n);
cout<<"B=";
B.display();
cout<<"输入要增加到集合A中的元素:";
cin>>n;
if (!A.addElem(n)) cout<<"增加失败,集合A已满!";
else
{
cout<<"A=";
A.display();
}
cout<<"输入要增加到集合B中的元素:";
cin>>n;
if (!B.addElem(n)) cout<<"增加失败,集合B已满!";
else
{
cout<<"B=";
B.display();
}
return 0;
}
//---------------------------------------------------------------