问题标题:
【链表实现集合交并差//求交集函数Node*qiujiaoji(Node*h1,Node*h2){//h为交集所在链表的头指针Node*h=newNode;Node*p=h,*q;//p,q为交集中移动的指针Node*p1=h1,*p2=h2;//p1,p2为两个集合中移动的指针//找出相】
问题描述:

链表实现集合交并差

//求交集函数

Node*qiujiaoji(Node*h1,Node*h2)

{

//h为交集所在链表的头指针

Node*h=newNode;

Node*p=h,*q;//p,q为交集中移动的指针

Node*p1=h1,*p2=h2;//p1,p2为两个集合中移动的指针

//找出相同的元素加入

while(p1!=NULL)

{

p2=h2;

while(p2!=NULL)

{

if(p1->content==p2->content)

{

p->content=p1->content;

p->next=newNode;

q=p;

p=p->next;

}

p2=p2->next;

}

p1=p1->next;

}

q->next=NULL;

deletep;

returnh;

}

//求并集函数

Node*qiubingji(Node*h1,Node*h2)

{

//h为并集所在链表的头指针

Node*h=newNode;

Node*p=h,*q;//p,q为并集中移动的指针

Node*p1=h1,*p2=h2;//p1,p2为两个集合中移动的指针

//把第一个集合复制到并集中

while(p1!=NULL)

{

p->content=p1->content;

p->next=newNode;

q=p;

p=p->next;

p1=p1->next;

}

//找出第二个集合中不包含在第一个集合内的元素补充进去

while(p2!=NULL)

{

p1=h1;

while(p1!=NULL)

{

if(p2->content!=p1->content)

{

p->content=p2->content;

p->next=newNode;

q=p;

p=p->next;

p2=p2->next;

}

p1=p1->next;

}

p2=p2->next;

}

q->next=NULL;

deletep;

returnh;

}

//求第一个集合/第二个集合的函数

Node*qiuchaji_A_and_B(Node*h1,Node*h2)

{

//h为差集所在链表的头指针

Node*h=newNode;

Node*p=h,*q;//p,q为差集中移动的指针

Node*p1=h1,*p2=h2;//p1,p2为两个集合中移动的指针

//把第一个集合复制到差集中

while(p1!=NULL)

{

p->content=p1->content;

p->next=newNode;

q=p;

p=p->next;

p1=p1->next;

}

q->next=NULL;

deletep;

//把第二个集合中出现的元素删除

p=h;

while(p->next!=NULL)

{

p2=h2;

while(p2!=NULL)

毕凌燕回答:
  从思路上看,交集的函数是对的,但并集和差集的做法不对.并集函数中,先把h1的队列复制过去是对的,但要把h2中不存在h1的元素补充进去时,每拿出一个h2的元素,需要遍历所有h1的元素,然后才能决定是否放进结果集,不能一有...
孙向华回答:
  谢谢。。成功了。。但是之前完全运行不起来原来是main函数有地方写错了。。。
其它推荐
热门其它推荐