用c语言编写一段程序,求两个集合的交要c语言的,直接粘过来在c++里就可以运行的那种!
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/31 19:49:20
用c语言编写一段程序,求两个集合的交要c语言的,直接粘过来在c++里就可以运行的那种!
用c语言编写一段程序,求两个集合的交
要c语言的,直接粘过来在c++里就可以运行的那种!
用c语言编写一段程序,求两个集合的交要c语言的,直接粘过来在c++里就可以运行的那种!
/*链表实现集合运算*/
#include
typedef int ElemType;
struct SNode {
ElemType data;
SNode* next;
};
void InitSet(SNode*& HT)
{
HT=NULL;
}
void ClearSet(SNode*& HT)
{
SNode *p=HT, *q;
while(p!=NULL)
{
q=p->next;
delete p;
p=q;
}
HT=NULL;
}
int LenthSet(SNode* HT)
{
int n=0;
while(HT!=NULL)
{
n++;
HT=HT->next;
}
return n;
}
bool EmptySet(SNode* HT)
{
return HT==NULL;
}
bool Inset(SNode* HT, ElemType item)
{
while(HT!=NULL)
{
if(HT->data==item) return true;
else HT=HT->next;
}
return false;
}
void OutputSet(SNode* HT)
{
while(HT!=NULL)
{
coutdata==item) break;
else HT=HT->next;
}
if(HT!=NULL)
{
HT->data=temp;
return true;
}
else return false;
}
bool InsertSet(SNode*& HT, ElemType item)
{
//建立值为item的新结点
SNode* newptr= new SNode;
newptr->data=item;
//从单链表中顺序查找是否存在值为item的结点
SNode* p=HT;
while(p!=NULL)
{
if(p->data==item) break;
else p=p->next;
}
// 若不存在则把新结点插入到表头并返回真,否则不返回假
if(p==NULL)
{
newptr->next=HT;
HT=newptr;
return true;
}
else return false;
}
bool DeleteSet(SNode*& HT, ElemType& item)
{
//从单链表中顺序查找是否存在值为item的结点
SNode *cp=HT, *ap=NULL;
while(cp!=NULL)
{
if(cp->data==item) break;
else
{
ap=cp;
cp=cp->next;
}
}
//若不存在则不返回假,表明删除失败
if(cp==NULL)
return false;
//由item带回待删除结点cp的完整值,若不需要带回可设置item为值参
item=cp->data;
if(ap==NULL) HT=cp->next;
//从单链表中删除已经找到的cp结点并对ap是否为表头做不同处理
else ap->next = cp->next;
//删除cp结点后返回真
delete cp;
return true;
}
//求两集合的并集
void UnionSet(SNode* HT1, SNode* HT2, SNode*& HT)
{
HT=NULL;
//把HT1集合单链表元素复制到HT集合单链表中
SNode* p=HT1;
while(p!=NULL)
{
//建立新结点并赋值为p->data
SNode* newptr=new SNode;
newptr->data=p->data;
//把新结点插入到HT集合单链表的表头并让P指向下一个结点
newptr->next=HT;
HT=newptr;
p=p->next;
}
//把HT1集合单链表的每个元素插入到HT集合单链表中
p=HT2;
while(p!=NULL)
{
InsertSet(HT, p->data);
p=p->next;
}
}
//求集合的交集
void InterseSet(SNode* HT1, SNode* HT2, SNode*& HT)
{
HT=NULL;
ElemType x;
SNode* p=HT2;
while(p!=NULL)
{
x=p->data;
bool b=FindSet(HT1,x); //用x查找HT1集合
if(b) InsertSet(HT,x); //若查找成功则把x插入到HT集合中
p=p->next;
}
if(HT==NULL)
cout