有个问题,哪位大大帮我改下程序。。- -
#include "stdio.h"#include "stdlib.h"
#include "conio.h"
struct Link *INSERT_SET(struct Link *head);
struct Link *C(struct Link *a,struct Link *b);
struct Link *D(struct Link *a,struct Link *b);
struct Link *E(struct Link *a,struct Link *b);
int IN_SET();
void DispLink(struct Link *head);
struct Link
{
int data;
struct Link *next;
};
void main()
{
printf("\n\n\n\n");
printf(" 1 请输入集合A的元素\n");
printf(" 2 请输入集合B的元素\n");
printf(" 3 输出集合A的元素\n");
printf(" 4 输出集合B的元素\n");
printf(" 5 测试集合A的元素\n");
printf(" 6 测试集合B的元素\n");
printf(" 7 求集合A,B的交集\n");
printf(" 8 求集合A,B的并集\n");
printf(" 9 求集合A,B的对称差\n");
printf(" 0 退出系统");
printf("\n\n\n\n");
/////程序的实现(主函数中的调用)
int choice;
struct Link *a=NULL;
struct Link *b=NULL;
scanf("%d",&choice);
switch(choice)
{
case 1: //输入集合A的元素
a=INSERT_SET(a);
printf("\n");
break;
case 2: //输入集合B的元素
b=INSERT_SET(b);
printf("\n");
break;
case 3: //输出集合A的元素
printf("集合A:\n");
DispLink(a);
break;
case 4: //输出集合B的元素
printf("集合B:\n");
DispLink(b);
break;
case 5: //测试集合A
a=IN_SET(a);
break;
case 6: //测试集合B
b=IN_SET(b);
break;
case 7: //求集合A,B的交集C
C(a,b);
break;
case 8: //求集合A,B的并集D
D(a,b);
break;
case 9: //求集合A,B的对称差
E(a,b);
break;
case 0: //退出系统
exit(0);
default:printf("您输入的数据不正确,请输入自然数(1~10)\n");
}
system("pause");////停顿
fflush(stdin); ////清除输入缓冲区,防止不规范输入
system("cls"); ////调用系统函数实现清屏
}
//集合元素输入并插入到单链表中的函数,保证所输入的集合中的元素是唯一且以非递减方式存储在单链表中
struct Link *INSERT_SET(struct Link *head)
{
struct Link *p1=NULL;
struct Link *p2=head;
int data;
p1=(struct Link *)malloc(sizeof(struct Link)); //为新添加的结点申请内存
if(p1=NULL) //若申请内存失败
{
printf("No enough memory to molloc.\n");
exit(0); //退出程序
}
else if(head=NULL)
{
head=p1;
}
else
{
while(p2->next!=NULL)
{
p2=p2->next;
}
p2->next=p1;
}
p2=p1;
printf("请输入一个元素:\n");
scanf("%d",&data);
if(p1->data==p2->data)
{
printf("这个数已经存在,请输入另一个数:\n");
scanf("%d",&data);
}
else if(p1->data<p2->data)
{
int m;
m=p1->data;
p1->data=p2->data;
p2->data=m;
}
else
p2->data=data;
p2=p1;
p2->next=NULL;
return head;
}
//集合元素测试函数IN_SET,如果元素已经在集合中返回0,否则返回1
int IN_SET(struct Link *head)
{
int test;
struct Link *p=head;
if(p==NULL)
printf("这个集合没有元素\n");
else
{
printf("请输入一个测试值:\n");
scanf("%d",&test);
while(p!=NULL)
{
if(test==p->data)
{
return 0;
}
else
{
return 1;
}
p=p->next;
}
}
}
//编写集合元素输出函数,对建立的集合链表按非递增方式输出
void DispLink(struct Link *head)
{
struct Link *p=head;
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
}
//求集合A、B的交C=A∩B的函数
struct Link *C(struct Link *a,struct Link *b)
{
struct Link *d;
struct Link *e;
struct Link *c;
struct Link *p1=a;
struct Link *p2=b;
d=e=(struct Link *)malloc(sizeof(struct Link));
while(p1!=NULL)
{
while(p2!=NULL)
{
if(p1->data==p2->data)
{
c=(struct Link *)malloc(sizeof(struct Link));
c->data=p1->data;
c->next=NULL;
d->next=c;
d=c;
}
p2=p2->next;
}
p2=a;
p1=p1->next;
}
return e->next;
}
//求集合A、B的并D=A∪B的函数,并输出集合D的元素
struct Link *D(struct Link *a,struct Link *b)
{
struct Link *c;
struct Link *p1=a;
struct Link *p2=b;
while(p1!=NULL)
{
while(p2!=NULL)
{
if(p1->data==p2->data)
{ c=(struct Link *)malloc(sizeof(struct Link));
c->data=p1->data;
p1=p1->next;
p2=p2->next;
c->next=NULL;
}
else
{
struct Link *d;
c=d=(struct Link *)malloc(sizeof(struct Link));
c->data=p1->data;
d=c->next;
c=d;
c->data=p2->data;
c->next=NULL;
}
}
}
return c;
}
// 求集合A与B的对称差E=(A-B)∪(B-A) 的函数,并输出集合E的元素
struct Link *E(struct Link *a,struct Link *b)
{
struct Link *d;
struct Link *e;
struct Link *c;
struct Link *p1=a;
struct Link *p2=b;
while(p1!=NULL)
{
while(p2!=NULL)
{
if(p1->data!=p2->data)
{
c=(struct Link *)malloc(sizeof(struct Link));
d=(struct Link *)malloc(sizeof(struct Link));
c->data=p1->data;
d->data=p2->data;
p1=p1->next;
p2=p2->next;
c->next=NULL;
d->next=NULL;
}
}
}
e=(struct Link *)malloc(sizeof(struct Link));
e=D(c,d);
return e;
}
//释放内存
void freeNode(struct Link *head)
{
struct Link *p1=head,*p2=NULL;
while(p1!=NULL)
{
p2=p1;
p1=p2->next;
free(p2);
}
head->next=NULL;
}
我编译是这样
F:\c语言课程设计\c语言课程设计.cpp(56) : error C2660: 'IN_SET' : function does not take 1 parameters
F:\c语言课程设计\c语言课程设计.cpp(59) : error C2660: 'IN_SET' : function does not take 1 parameters
执行 cl.exe 时出错.