集合的交并差运算

  • 格式:doc
  • 大小:17.99 KB
  • 文档页数:8

#include

#include

#include

struct set{

int coef;

struct set *next;

};

void createlist_p(struct set *&p,int n)

{

int i;

struct set *L;

p=(struct set *)malloc(sizeof(set));

p->next=NULL;

for(i=n;i>0;i--)

{

L=(struct set *)malloc(sizeof(set));

牰湩晴尨请输入该集合中第%d个整数元素:,n-i+1);

scanf(%d,&L->coef);

L->next=p->next;

p->next=L;

}

}//生成新链表用于存放两集合中的元素

void printlist_p(struct set *&p)

{

struct set *L;

int i;

L=p->next;

晩??瀠楲瑮?该表为空!\n);

while(L!=NULL)

{

printf(%d ,L->coef);

L=L->next;

i++;

}

printf(\

);

}//打印输入的两集合中的元素

void Addset(struct set *&p,struct set *&q,struct set *&r)

{

struct set *k,*m,*n;

r=(struct set *)malloc(sizeof(set));

r->next=NULL;

k=p->next;

for(;k;)

{

m=(struct set *)malloc(sizeof(set));

m->next=r->next;

r->next=m;

m->coef=k->coef;

k=k->next;

}//把第一个集合中的元素放在新集合中

k=q->next;

m=(struct set *)malloc(sizeof(set));

m->next=r->next;

r->next=m;

m->coef=k->coef;

k=k->next;

for(;k;)

{

for(n=r->next;(k->coef!=n->coef)&&n->next;){

n=n->next;

}//与新集合中的元素比较

if((k->coef!=n->coef)&&!(n->next)){

m=(struct set *)malloc(sizeof(set));

m->next=r->next;

r->next=m;

m->coef=k->coef;

}

k=k->next;

}//对第二个集合中的元素进行分析

}//求A∪B

void Subset(struct set *&p,struct set *&q,struct set *&r){

struct set *k,*m,*n;

r=(struct set *)malloc(sizeof(set));

r->next=NULL;

n=q->next;

for(;n;){

m=p->next;

for(;(m->coef!=n->coef)&&m->next;){

m=m->next;

}

if(m->coef==n->coef) {

k=(struct set *)malloc(sizeof(set));

k->next=r->next;

r->next=k;

k->coef=m->coef;

}

n=n->next;

}

}//求A∩B

void Intset(struct set *&p,struct set *&q,struct set *&r){

struct set *k,*m,*n;

r=(struct set *)malloc(sizeof(set));

r->next=NULL;

m=p->next;

for(;m;){

n=q->next;

for(;(m->coef!=n->coef)&&n->next;){

n=n->next;

}

if(!n->next&&(m->coef!=n->coef)) {

k=(struct set *)malloc(sizeof(set));

k->next=r->next;

r->next=k;

k->coef=m->coef;

}

m=m->next;

}

}//求A-B

void bangzhu(){

printf(\

\t\t\t***********************************);

printf(\

\t\t\t* 求集合的交并差 *);

printf(\

\t\t\t*********************************\n);

}

void main()

{

struct set *p,*q,*r;

int m,n,node;

bangzhu();

for(;;)

{

do{

牰湩晴尨请输入您要选择操作的代码:\n);

printf(:求两集合的并A∪B\n);

printf(:求两集合的交A∩B\n);

printf( :求两集合的差A-B\n);

printf(:退出该程序\n);

scanf(%d,&node);

} while(node<0||node>3);

if(node==0) exit(1);

printf(\ \t\t/*请输入集合A中元素的个数:*/\n);

scanf(%d,&m);

createlist_p(p,m);

printf(\ \t\t/*请输入集合B中元素的个数:*/\n);

scanf(%d,&n);

createlist_p(q,n);

牰湩晴尨集合A中元素为:);

printlist_p(p);

牰湩晴尨集合B中元素为:);

printlist_p(q);

while(node<0||node>3);

switch(node)

{

case 1: Addset( p,q,r);printf(A∪B:\n);printlist_p(r);break;

case 2: Subset( p,q,r);printf(A∩B:\n);printlist_p(r);break;

case 3: Intset(p,q,r); printf(A-B:\n);printlist_p(r);break;

}

printf(\

);

}

}

可以了

楼上方法是正确的,学习!把分给楼上 主要原因是C程序中使用了C语言不支持的引用所致,修改如下:

//---------------------------------------------------------------------------

#include

#include

#include

typedef struct set{

int coef;

struct set *next;

} set ;

void createlist_p(struct set **p,int n)

{

int i;

struct set *L;

*p=(struct set *)malloc(sizeof(set));

(*p)->next=NULL;

for(i=n;i>0;i--)

{

L=(struct set *)malloc(sizeof(set));

牰湩晴尨请输入该集合中第%d个整数元素:,n-i+1);

scanf(%d,&L->coef);

L->next=(*p)->next;

(*p)->next=L;

}

}//生成新链表用于存放两集合中的元素

void printlist_p(struct set **p)

{

struct set *L;

int i=0;

L=(*p)->next;

晩??瀠楲瑮?该表为空!\n);

while(L!=NULL)

{

printf(%d ,L->coef);

L=L->next;

i++;

}

printf(\

);

}// 打印输入的两集合中的元素

void Addset(struct set **p,struct set **q,struct set **r)

{

struct set *k,*m,*n;

*r=(struct set *)malloc(sizeof(set));

(*r)->next=NULL;

k=(*p)->next;

for(;k;)

{

m=(struct set *)malloc(sizeof(set));

m->next=(*r)->next;

(*r)->next=m;

m->coef=k->coef;

k=k->next;

}//把第一个集合中的元素放在新集合中

k=(*q)->next;

m=(struct set *)malloc(sizeof(set));