一道课后习题,请大家帮忙看下。
这题是关于抽象数据类型的。要定义一个叫做集合类型。相关操作,有创建,加入元素,求交集,求并集等。
我想要动态定义。我写的如下:
typedef struct{
int *debut;/*起始位置*/
int card;/*元素个数*/
}ensemble;
void Creer(ensemble *e)/*创建一个空集合*/
{
e->debut=NULL;
e->card=0;
}
void ajout(ensemble *e,int x)/*向集合e中添加x这个元素*/
{
if(e->card==0)/*如果e是空集合*/
{
e->debut=(int *)malloc(sizeof(int));
*(e->debut)=x;
e->card++;
}
else{
e->debut=(int *)realloc(e->debut,e->card+1);
*(e->debut+e->card)=x;
e->card++;
}
}
int Union(ensemble e1,ensemble e2,ensemble *e3){ /*求2个集合的并集*/
if(est_vide(e1))return 0;/*如果e1或者e2是空集*/
if(est_vide(e2))return 0;
int i;
for(i=0;i<e1.card;i++){ /*向集合e3中依次添加e1的每个元素*/
ajout(e3,*(e1.debut+i));
printf("%d ",*(e1.debut+i));
}
for(i=0;i<e2.card;i++){ /*向集合e3中依次添加e2的每个元素*/
ajout(e3,*(e2.debut+i));
printf("%d ",*(e2.debut+i));
}
return 1;
}
我这里还没有检查是否有重复元素出现。
最后这个求并集的函数有问题,不知道哪里不对,想请教一下,谢谢。