用c语言编写一段程序,求两个集合的交

学习 时间:2026-04-07 00:51:23 阅读:8549
用c语言编写一段程序,求两个集合的交要c语言的,直接粘过来在c++里就可以运行的那种!

最佳回答

细腻的八宝粥

温婉的奇迹

2026-04-07 00:51:23


#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

最新回答共有2条回答

  • 伶俐的枕头
    回复
    2026-04-07 00:51:23

    #includetypedef 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->dataSNode* 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

上一篇 cheer up用中文翻译是什么呀?

下一篇 窗帘挂球分类按照款式分吗