#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define ListSize 100 //允许的最大长度
typedef char ListData;
typedef struct List
{
ListData data[ListSize];
int Length; //当前元素个数
}*SeqList;
void menu() //建立菜单
{
printf("|--------集合的交并运算--------|\n");
printf("|-------------菜单-------------|\n");
printf("| 1、初始化集合A |\n");
printf("| 2、初始化集合B |\n");
printf("| 3、显示集合A、B |\n");
printf("| 4、集合的并运算|\n");
printf("| 5、集合的交运算|\n");
printf("| 6、退出|\n");
printf("|———————————————|\n");
printf("\n");
}
//模块1 建立
void Creat(SeqList&L)
{
L=(SeqList)malloc(sizeof(List));
if(L==NULL)
{
printf("存储空间分配失败!\n");
exit(1);
}
L->Length=0;
}
int Length(SeqList&L)
{
return L->Length;
}
//模块2 初始化
void Begin(SeqList&L)
{
int i=0;
printf("请输入集合中的元素,按#结束。
\n");
fflush(stdin); //清除缓存
do
{
scanf("%c",&L->data[i]);
L->Length++;
}
while(L->data[i++]!='#');
L->Length--;
}
//模块3 提取
int Get(SeqList&L,int i)
{
if(i>=0&&i<L->Length)
{
return L->data[i];
}
}
//模块4 查找
int Find(SeqList&L,ListData x)
{
int i=0;
while(i<L->Length&&L->data[i]!=x)
{
i++;
}
if(i<L->Length) //健壮性判断return 1;
else
return 0;
}
//模块5 插入
int Insert(SeqList&L,ListData x,int i)
{
if(i<0||i>L->Length||L->Length==ListSize)
{
return 0;
}
else
{
for(int j=L->Length;j>=i;j--)
{
L->data[j]=L->data[j-1];
}
L->data[i]=x;
L->Length++;
return 1;
}
}
//模块6 删除
int Delete(SeqList&L,int i)
{
for(int j=i;j<L->Length;j++)
{
L->data[j]=L->data[j+1];
}
L->Length--;
return 1;
}
//模块7 求并
void Union(SeqList&A,SeqList&B) {
int n=Length(A);
int m=Length(B);
for(int i=0;i<m;i++)
{
int x=Get(B,i);
int k=Find(A,x);
if(k==-1)
{
Insert(A,x,i);
n++;
}
}
}
//模块8 求交
void UUnion(SeqList&A,SeqList&B) {
int i;
int n=Length(A);
int m=Length(B);
while(i<n)
{
int x=Get(B,i);
if(!Find(A,x))
{
Delete(B,i);
i--;
}
else
{
i++;
}
}
}
//模块9 显示
void Display(SeqList&L)
{
int i;
for(i=0;i<L->Length;i++)
{
printf("%c",L->data[i]);
}
getch();
}
int main()
{
int i;
char c;
SeqList A;
SeqList B;
while(1)
{
system("cls");
menu();
printf("请选择菜单项序号:\n");
scanf("%d",&i);
system("cls");
switch(i)
{
case 1:
Creat(A);
Begin(A);
break;
case 2:
Creat(B);
Begin(B);
break;
case 3:
printf("求并前的A集合是:\n");
Display(A);
printf("\n");
printf("求并前的B集合是:\n");
Display(B);
break;
case 4:
Union(A,B);
printf("求并后的A、B集合是:\n");
Display(A);
break;
case 5:
UUnion(A,B);
printf("求交后的A、B集合是:\n");
Display(B);
break;
case 6:
exit(1);
break;
default:;
}
}
}。