C语言实现集合的交,并,
差
公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-
【问题描述】
编制一个能演示执行集合的并、交和差运算的程序【基本要求】
(1)集合的元素限定为小写字母字符[ 'a'......'z' ]
(2 )演示程序以用户和计算机对话的方式执行
【测试数据】
【实现提示】
以有序链表表示集合
【代码过程】
1。
先定义集合的数据类型
.{
ElemType data;
LNode *next;
}*Link, *Position;
typedef struct...{
Link head,tail;
int len;
}LinkSet;
.{
.{
.{
if(h1->data < (link->data) && h2->data > (link->data) ) .{ .{
.{
.{
pre = h; h=h->next; j++;
}
if(j==0) return NULL;
return pre;
}
Status PrintSets(LinkSet &ls)...{
.{
printf("%c ",h->data);
h = h->next;
}
printf(" ] ");
return OK;
}
Position GetHead(LinkSet &ls)...{
.{
.{
.{
.{
.{
.{.{
.{
int result = Compare(pa,pb); .{
DelFirst(lsa,node);Append(lsc,node); pa =
NextPos(ha); .{ .{
DelFirst(lsb,node); pb = NextPos(hb);.{
DelFirst(lsa,node);Append(lsc,node);
}
while(!Empty(lsb))...{
DelFirst(lsb,node);Append(lsc,node);
}
return OK;
}
Status IntersectionSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{ .{
int result = Compare(pa,pb);
if( result<0) ...{
DelFirst(lsa,node);pa = NextPos(ha);
}else if(result>0)...{
DelFirst(lsb,node); pb = NextPos(hb);
}else...{
DelFirst(lsb,node); Append(lsc,node);pb = NextPos(hb);
DelFirst(lsa,node);pa = NextPos(ha);
}
}
while(!Empty(lsa))...{
DelFirst(lsa,node);Append(lsc,node);
}
return OK;
}
Status DifferenceSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{
.{
int result = Compare(pa,pb);
if( result<0) ...{
DelFirst(lsa,node);Append(lsc,node);pa = NextPos(ha); }else if(result>0)...{
DelFirst(lsb,node); pb = NextPos(hb);
}else...{
DelFirst(lsa,node); pa = NextPos(ha);
DelFirst(lsb,node); pb = NextPos(hb);
}
}
return OK;
}
Status CopySets(LinkSet lsa, LinkSet lsb)...{
.{
Link node;
CreateNode(node,la->data);
lb=node;
++;
la = la->next;
lb = lb->next;
}
= lb;
return OK;
}
.{
printf("************************************************************** ************** " );
printf("*MakeSet1-1 MakeSet1-2 Union-u Intersection-i Difference-d Quit-q * " );
printf("************************************************************** ************** " );
}
void main()
...{
LinkSet set1,set2,set3,seta,setb;
InitSets(set1),InitSets(set2); .{
Initialization();
printf("集合Set1:");
PrintSets(set1); .{
case '1': //集合set1 赋值
printf("请输入集合Set1的内容:");
fflush(stdin);
gets(setsContent);
InitSets(set1);
SetSets(set1,setsContent);
break;
case '2': //集合set1 赋值
printf("请输入集合Set1的内容:");
fflush(stdin);
gets(setsContent);
SetSets(set2,setsContent);
break;
case 'u':
case 'U': //求并
InitSets(set3);
CopySets(set1,seta); //因为求并的算法是添加一个节点,删除set1,set2中对应的节点,
CopySets(set2,setb); //所以要复制一份
UnionSets(seta,setb,set3); //下同
printf("set1 U set2=: ");
PrintSets(set3);
fflush(stdin);
getchar();
break;
case 'i':
case 'I': //求交
InitSets(set3);
CopySets(set1,seta);
CopySets(set2,setb);
IntersectionSets(seta,setb,set3);
printf("set1 交 set2=: ");
fflush(stdin);
getchar();
break;
case 'd':
case 'D': //求差 InitSets(set3);
CopySets(set1,seta);
CopySets(set2,setb);
DifferenceSets(seta,setb,set3);
printf("set1 - set2=: ");
PrintSets(set3);
fflush(stdin);
getchar();
break;
case 'q':
case 'Q':
exit(0);
break;
}
system("cls"); //清屏
}
} //~。