帮我看看到底是出了什么错误!我觉得程序没错,但是我怎么调试也调不好!??拜托各位高手!~!~

tjl2yx 2004-12-14 07:55:18
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct node *link;
typedef struct node {int element;link next;}Node;
link newNode()
{link p;
if((p=malloc(sizeof(Node)))==0)
printf("Exhausted memory.");
else return p;
}

typedef struct list *Set;
typedef struct list
{link first;
}List;

Set SetInit()
{Set S=malloc(sizeof *S);
S->first=0;
return S;
}

Set SetIntersection(Set A,Set B)
{
link a,b,q,p,r;
Set tmp=SetInit();
a=A->first;
b=B->first;
p=newNode();
q=p;
while(a && b){
if(a->element==b->element){
r=newNode();
r->element=a->element;
r->next=0;
p->next=r;
p=r;
a=a->next;
b=b->next;
}
else if(a->element<b->element)a=a->next;
else b=b->next;}
if(p!=q) tmp->first=q->next;
free(q);
return tmp;
}

Set SetUnion(Set A,Set B)
{
link a,b,q,p,r;
Set tmp=SetInit();
a=A->first;
b=B->first;
p=newNode();
q=p;
while(a && b){
if(a->element==b->element){
r=newNode();
r->element=a->element;
r->next=0;
p->next=r;
p=r;
a=a->next;
b=b->next;
}
else if(a->element<b->element)
{
r=newNode();
r->element=a->element;
r->next=0;
p->next=r;
p=r;
a=a->next;
}
else
{
r=newNode();
r->element=b->element;
r->next=0;
p->next=r;
p=r;
b=b->next;
}
}
if(a) p->next=a;
if(b) p->next=b;
if(p!=q) tmp->first=q->next;
free(q);
return tmp;
}

Set SetDifference(Set A,Set B)
{
link a,b,q,p,r;
Set tmp=SetInit();
a=A->first;
b=B->first;
p=newNode();
q=p;
while(a && b){
if(a->element==b->element){
a=a->next;
b=b->next;
}
else if(a->element<b->element)
{
r=newNode();
r->element=a->element;
r->next=0;
p->next=r;
p=r;
a=a->next;
}
else b=b->next;}
if(a) p->next=a;
if(p!=q) tmp->first=q->next;
free(q);
return tmp;
}


void setInsert(int x,Set s)
{
link p,q,r;
p=s->first;
q=p;
while(p&&p->element<x){
q=p;p=p->next;}
if(p&&p->element==x)return;
r=newNode();
r->element=x;
r->next=p;
if(p==q) s->first=r;
else q->next=r;
}
void PrintSet(Set S)
{link p;
for(p=S->first;p;p=p->next)
printf("%d ",p->element);
}

void main()
{
int i;
int a[]={9,7,8,11,23,5};
int b[]={45,23,12,23,11,26,4,7};
Set set1,set2;
set1=SetInit();
set2=SetInit();
for(i=0;i<6;i++)
setInsert(a[i],set1);
printf("\n Set1:");
PrintSet(set1);
for(i=0;i<8;i++)
setInsert(b[i],set2);
printf("\n Set2:");
PrintSet(set2);
printf("\n SetIntersection(set1,set2):");
PrintSet(SetIntersection(set1,set2));
printf("\n SetUnion(set1,set2):");
PrintSet(SetUnion(set1,set2));
printf("\n SetDifference(set1,set2):");
PrintSet(SetDifference(set1,set2));
}
...全文
186 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyofdreams 2005-01-03
  • 打赏
  • 举报
回复
Set SetInit()
{
Set S=malloc(sizeof *S); 《------------只有这一处错误
S->first=0;
return S;
}

用C的话应为:
Set S=malloc( sizeof(List) );

TC下编译通过。
xtaaiyve 2004-12-15
  • 打赏
  • 举报
回复
打符号的地方为出错处

我知道你编程的意思了,结果正确!
xtaaiyve 2004-12-15
  • 打赏
  • 举报
回复
你运行一下看是不是这个结果?
加我的qq:122140639

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct node *link;
typedef struct node {int element;link next;}Node;
link newNode()
{link p;
if((p=new Node)==NULL)///////////////////////////
printf("Exhausted memory.");
else return p;
}


typedef struct list
{link first;
}List;
typedef struct list *Set;

Set SetInit()
{Set S=new List;///////////////////////////////////
S->first=NULL;
return S;
}

Set SetIntersection(Set A,Set B)
{
link a,b,q,p,r;
Set tmp=SetInit();
a=A->first;
b=B->first;
p=newNode();
q=p;
while(a && b){
if(a->element==b->element){
r=newNode();
r->element=a->element;
r->next=0;
p->next=r;
p=r;
a=a->next;
b=b->next;
}
else if(a->element<b->element)a=a->next;
else b=b->next;}
if(p!=q) tmp->first=q->next;
free(q);
return tmp;
}

Set SetUnion(Set A,Set B)
{
link a,b,q,p,r;
Set tmp=SetInit();
a=A->first;
b=B->first;
p=newNode();
q=p;
while(a && b){
if(a->element==b->element){
r=newNode();
r->element=a->element;
r->next=0;
p->next=r;
p=r;
a=a->next;
b=b->next;
}
else if(a->element<b->element)
{
r=newNode();
r->element=a->element;
r->next=0;
p->next=r;
p=r;
a=a->next;
}
else
{
r=newNode();
r->element=b->element;
r->next=0;
p->next=r;
p=r;
b=b->next;
}
}
if(a) p->next=a;
if(b) p->next=b;
if(p!=q) tmp->first=q->next;
free(q);
return tmp;
}

Set SetDifference(Set A,Set B)
{
link a,b,q,p,r;
Set tmp=SetInit();
a=A->first;
b=B->first;
p=newNode();
q=p;
while(a && b){
if(a->element==b->element){
a=a->next;
b=b->next;
}
else if(a->element<b->element)
{
r=newNode();
r->element=a->element;
r->next=0;
p->next=r;
p=r;
a=a->next;
}
else b=b->next;}
if(a) p->next=a;
if(p!=q) tmp->first=q->next;
free(q);
return tmp;
}


void setInsert(int x,Set s)
{
link p,q,r;
p=s->first;
q=p;
while(p&&p->element<x){
q=p;p=p->next;}
if(p&&p->element==x)return;
r=newNode();
r->element=x;
r->next=p;
if(p==q) s->first=r;
else q->next=r;
}
void PrintSet(Set S)
{link p;
for(p=S->first;p;p=p->next)
printf("%d ",p->element);
}

void main()
{
int i;
int a[]={9,7,8,11,23,5};
int b[]={45,23,12,23,11,26,4,7};
Set set1,set2;
set1=SetInit();
set2=SetInit();
for(i=0;i<6;i++)
setInsert(a[i],set1);
printf("\n Set1:");
PrintSet(set1);
for(i=0;i<8;i++)
setInsert(b[i],set2);
printf("\n Set2:");
PrintSet(set2);
printf("\n SetIntersection(set1,set2):");
PrintSet(SetIntersection(set1,set2));
printf("\n SetUnion(set1,set2):");
PrintSet(SetUnion(set1,set2));
printf("\n SetDifference(set1,set2):");
PrintSet(SetDifference(set1,set2));
}
atlcat 2004-12-14
  • 打赏
  • 举报
回复
哎~~第一:这里if((p=malloc(sizeof(Node)))==0)
改为:if((p=(link)(malloc(sizeof(Node))))==0)
然后:{Set S=malloc(sizeof *S);
S根本没有看到定义,你用什么?
atlcat 2004-12-14
  • 打赏
  • 举报
回复
又是一长段代码,你能不能说说你报错在哪里啊?

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧