集合
集合实现,集合链式,集合顺序,集合链式存储,集合顺序存储,集合实现代码,集合数据结构实现,集合c/c++实现
1.集合的顺序存储结构
[cpp]
struct Set
{
ElemType *set;
int len;
int MaxSize;
};
void InitSet(Set &S)//初始化集合
{
S.MaxSize=10;
S.set=new ElemType[10];
if(!S.set)
{
cout<<“memory is use up!”<<endl;
exit(1);
}
S.len=0;
}
void ClearSet(Set &S)//清空集合
{
if(S.set!=NULL)
{
delete[] S.set;
S.set=NULL;
}
S.MaxSize=S.len=0;
}
int LengthSet(Set &S)//求集合的长度
{
return S.len;
}
bool EmptySet(Set &S)//集合是否为空
{
return S.len==0;
}
bool InSet(Set &S,ElemType item)//元素是否属于集合
{
for(int i=0;i<S.len;i++)
if(S.set[i]==item) return true;
return false;
}
void OutputSet(Set &S)//输出集合
{
for(int i=0;i<S.len;i++)
cout<<S.set[i]<<” “;
cout<<endl;
}
bool FindSet(Set &S,ElemType &item)//查找集合
{
for(int i=0;i<S.len;i++)
if(S.set[i]==item) break;
if(i<S.len)
{
item=S.set[i];
return true;
}
else return false;
}
bool ModifySet(Set &S,const ElemType &item)//修改集合
{
for(int i=0;i<S.len;i++)
if(S.set[i]==item) break;
if(i<S.len)
{
S.set[i]=item;
return true;
}
else return false;
}
bool InsertSet(Set &S,ElemType item)//插入元素
{
int i;
for(i=0;i<S.len;i++)
if(S.set[i]==item) return false;
if(S.len==S.MaxSize)//直接定义较大空间比较方便
{
int k=sizeof(ElemType);
S.set=(ElemType *)realloc(S.set,2*S.MaxSize*k);
if(S.set==NULL)
{
cout<<“memory is used up!”<<endl;
exit(1);
}
S.MaxSize*=2;
}
S.set[S.len]=item;
S.len++;
return true;
}
bool DeleteSet(Set &S,ElemType &item)//删除元素
{
int i;
for(i=0;i<S.len;i++)
if(S.set[i]==item) break;
if(i<S.len)
{
item=S.set[i];
S.set[i]=S.set[S.len-1];
S.len–;
return true;
}
else return false;
}
void UnionSet(Set &S1,Set &S2,Set &S)//交集
{
int i;
S.MaxSize=S1.len+S2.len;
for(i=0;i<S1.len;i++)
S.set[i]=S1.set[i];
for(i=0;i<S2.len;i++)
InsertSet(S,S.set[i]);
}
void InterseSet(Set &S1,Set &S2,Set &S)//并集
{
int i;
ElemType x;S.len=0;
for(i=0;i<S2.len;i++)
{
x=S2.set[i];
if(FindSet(S1,x))
{
S.set[S.len]=x;S.len++;
}
}
}
void DifferenceSet(Set &S1,Set &S2,Set &S)//差集
{
int i;ElemType x;S.len=0;
for(i=0;i<S1.len;i++)
{
x=S1.set[i];
if(!FindSet(s2,x))
{
S.set[S.len]=x;S.len++;
}
}
}
[/cpp]
2.集合的链式存储结构
[cpp]
struct SNode
{
ElemType data;
SNode *next;
};
void InitSet(SNode *&HT)//初始化
{
HT=NULL;
}
void ClearSet(SNOde *&HT)//清空
{
SNode *p=HT,*q;
while(P)
{
q=p->next;
delete p;
p=q;
}
HT=NULL;
}
int LengthSet(SNode *HT)//长度
{
int i=0;
while(HT)
{
i++;
HT=HT->next;
}
return i;
}
bool EmptySet(SNode *HT)//是否为空
{
return HT==NULL;
}
bool Insert(SNode *HT,ElemType item)//元素是否属于集合
{
while(HT)
{
if(HT->data==item) return true;
else HT=HT->next;
}
return false;
}
void OutputSet(SNode *HT)//遍历
{
while(HT)
{
cout<<HT->data<<” “;
HT=HT->next;
}
cout<<endl;
}
bool FindSet(SNode *HT,ElemType &item)//查找元素
{
while(HT!=NULL)
{
if(HT->data==item) break;
else HT=HT->next;
}
if(HT)
{
item=HT->data;return true;
}
else return false;
}
bool ModifySet(SNode *HT,const ElemType &item)//修改元素
{
while(HT)
{
if(HT->data==item) break;
else HT=HT->next;
}
if(HT)
{
HT->data=item;return true;
}
else return false;
}
bool InsertSet(SNode *&HT,ElemType item)//插入元素
{
SNode *newpt=new SNode,*p=HT;
newpt->data=item;
while(p)
{
if(p->data==item) break;
else p=p->next;
}
if(!p)
{newpt->next=HT;HT=newpt;return true;}
else return false;
}
bool DeleteSet(SNode *&HT,ElemType &item)//删除元素
{
SNode *cp=HT,*ap=NULL;
while(cp)
{
if(cp->data==item) break;
else {ap=cp;cp=cp->next};
}
if(!cp) return false;
item=cp->data;
if(!ap) HT=cp->next;else ap->next=cp->next;
delete cp;return true;
}
void UnionSet(SNode *HT1,SNode *HT2,SNode *HT)//并集
{
HT=NULL;
while(HT1)
{
SNode *newpt=new SNode;
newpt->data=HT1->data;
newpt->next=HT;HT=newpt;
HT1=HT1->next;
}
while(HT2)
{
InsertSet(HT2,HT2->data);
HT2=HT2->next;
}
}
void InterseSet(SNode *HT1,SNode *HT2,SNode *HT)//交集
{
HT=NULL;
while(HT1)
{
if(FindSet(HT2,HT1->data))
InsertSet(HT,HT1->data);
HT1=HT1->next;
}
}
void DifferenceSet(SNode *HT1,SNode *HT2,SNode *HT)//差集
{
HT=NULL;
while(HT1)
{
if(!FindSet(HT2,HT1->data))
InsertSet(HT,HT1->data);
HT1=HT1->next;
}
}
[/cpp]