帮我看看到底是出了什么错误!我觉得程序没错,但是我怎么调试也调不好!??拜托各位高手!~!~
#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));
}