各位大牛帮帮忙,我这个程序纠结好久了~到底问题在哪?麻烦了~就是求两个集合的交集,并集,差集 20
#include<iostream>#include<cstdio>usingnamespacestd;structNode{intcontent;Node*next;}...
#include <iostream>
#include <cstdio>
using namespace std;
struct Node
{
int content;
Node *next;
};
Node *input()
{
Node *head=NULL,*tail;
int x;
cin>>x;
while(x!=-1)
{
Node *p=new Node;
p->content=x;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
cin>>x;
}
return head;
}
void output(Node *h)
{
for(Node *p=h;p->next!=0;p=p->next)
cout<<p->content<<' ';
cout<<endl;
}
int main()
{
Node *h1,*h2;
cout<<"请输入第一个集合,并以-1结束:"<<endl;
h1=input();
cout<<"请输入第二个集合,并以-1结束:"<<endl;
h2=input();
Node *a1=h1,*a2=h2,*j=NULL,*b=h2,*c=NULL;//j代表交集,b代表并集,c代表差集。
while(a1->next!=NULL)//采用插入开头的方法
{
while(a2->next!=NULL)
{
if(a1->content==a2->content) break;
a2=a2->next;
}
if(a2->next!=NULL)
{
if(j==NULL)
{
Node *p=new Node;
p->content=a1->content;
p->next=j;
j=p;
}
else
{
Node *p=new Node;
p->content=a1->content;
p->next=b;
b=p;
}
a1=a1->next;
a2=h2;
}
cout<<"两集合的交集为:"<<endl;
output(j);
cout<<"两集合的并集为:"<<endl;
output(b);
Node *q1=b,*q2=j;
while(q1->next!=NULL)
{
while(q2->next!=NULL)
{
if(q1->content==q2->content)
break;
q2=q2->next;
}
if(q2->next==NULL)
{
if(c==NULL)
{
c=q1;
c->next=NULL;
}
else
{
c->next=c;
c=q1;
}
}
else
q1=q1->next;
q2=j;
}
cout<<"两集合的差集为:"<<endl;
output(c);
return 0;
} 展开
#include <cstdio>
using namespace std;
struct Node
{
int content;
Node *next;
};
Node *input()
{
Node *head=NULL,*tail;
int x;
cin>>x;
while(x!=-1)
{
Node *p=new Node;
p->content=x;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
cin>>x;
}
return head;
}
void output(Node *h)
{
for(Node *p=h;p->next!=0;p=p->next)
cout<<p->content<<' ';
cout<<endl;
}
int main()
{
Node *h1,*h2;
cout<<"请输入第一个集合,并以-1结束:"<<endl;
h1=input();
cout<<"请输入第二个集合,并以-1结束:"<<endl;
h2=input();
Node *a1=h1,*a2=h2,*j=NULL,*b=h2,*c=NULL;//j代表交集,b代表并集,c代表差集。
while(a1->next!=NULL)//采用插入开头的方法
{
while(a2->next!=NULL)
{
if(a1->content==a2->content) break;
a2=a2->next;
}
if(a2->next!=NULL)
{
if(j==NULL)
{
Node *p=new Node;
p->content=a1->content;
p->next=j;
j=p;
}
else
{
Node *p=new Node;
p->content=a1->content;
p->next=b;
b=p;
}
a1=a1->next;
a2=h2;
}
cout<<"两集合的交集为:"<<endl;
output(j);
cout<<"两集合的并集为:"<<endl;
output(b);
Node *q1=b,*q2=j;
while(q1->next!=NULL)
{
while(q2->next!=NULL)
{
if(q1->content==q2->content)
break;
q2=q2->next;
}
if(q2->next==NULL)
{
if(c==NULL)
{
c=q1;
c->next=NULL;
}
else
{
c->next=c;
c=q1;
}
}
else
q1=q1->next;
q2=j;
}
cout<<"两集合的差集为:"<<endl;
output(c);
return 0;
} 展开
1个回答
展开全部
你求j,b的那段括号都不对,无法看懂你的else是对应哪个if的。你改写一下,然后我再看一次吧。
另外从现在可以看的代码来看,你至少求j是错的。因为你只有在j==NULL的时候才会往链表里面加入新元素。事实上j的长度一旦大于1,你的程序就出问题了。
b那段因为不知道你的else对应谁,我就没法看了。但是可以确认的一点是,你没有考虑那些h2里面出现过,h1里面没有出现过的数字。
求c的那段,我就没有看下去了。
最后,强烈建议你采取面向对象的写法。不是用了cout和cin就是c++了。至少你还应该实现链表以及链表的插入功能。用C的方法去写C++,可读性极差。
另外从现在可以看的代码来看,你至少求j是错的。因为你只有在j==NULL的时候才会往链表里面加入新元素。事实上j的长度一旦大于1,你的程序就出问题了。
b那段因为不知道你的else对应谁,我就没法看了。但是可以确认的一点是,你没有考虑那些h2里面出现过,h1里面没有出现过的数字。
求c的那段,我就没有看下去了。
最后,强烈建议你采取面向对象的写法。不是用了cout和cin就是c++了。至少你还应该实现链表以及链表的插入功能。用C的方法去写C++,可读性极差。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询