用C语言编写一个程序,采用顺序表表示集合(假设同一个集合中不存在重复的元素),将其按递增的方式排序,并求这样的两个集合的并,交,差。(并,交,差分开编写采用函数调用,设计一个菜单 输入1求并集,输入2求交集,输入3求差集)
时间: 2024-03-15 07:45:14 浏览: 71
好的,这是您的问题:
首先,我们可以定义一个结构体表示顺序表:
```c
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
}SqList;
```
其中,`data`表示数据数组,`length`表示当前集合中元素的个数。
接着,我们可以编写如下的排序函数:
```c
void SortList(SqList *L)
{
int i, j;
for (i = 0; i < L->length; i++) {
for (j = i + 1; j < L->length; j++) {
if (L->data[i] > L->data[j]) {
int temp = L->data[i];
L->data[i] = L->data[j];
L->data[j] = temp;
}
}
}
}
```
该函数采用冒泡排序的方式,将集合中的元素按递增的方式排序。
接着,我们可以编写求并集、交集、差集的函数:
```c
void Union(SqList *La, SqList *Lb, SqList *Lc)
{
int i = 0, j = 0, k = 0;
while (i < La->length && j < Lb->length) {
if (La->data[i] < Lb->data[j]) {
Lc->data[k++] = La->data[i++];
}
else if (La->data[i] > Lb->data[j]) {
Lc->data[k++] = Lb->data[j++];
}
else {
Lc->data[k++] = La->data[i++];
j++;
}
}
while (i < La->length) {
Lc->data[k++] = La->data[i++];
}
while (j < Lb->length) {
Lc->data[k++] = Lb->data[j++];
}
Lc->length = k;
}
void Intersection(SqList *La, SqList *Lb, SqList *Lc)
{
int i = 0, j = 0, k = 0;
while (i < La->length && j < Lb->length) {
if (La->data[i] < Lb->data[j]) {
i++;
}
else if (La->data[i] > Lb->data[j]) {
j++;
}
else {
Lc->data[k++] = La->data[i++];
j++;
}
}
Lc->length = k;
}
void Difference(SqList *La, SqList *Lb, SqList *Lc)
{
int i = 0, j = 0, k = 0;
while (i < La->length && j < Lb->length) {
if (La->data[i] < Lb->data[j]) {
Lc->data[k++] = La->data[i++];
}
else if (La->data[i] > Lb->data[j]) {
j++;
}
else {
i++;
j++;
}
}
while (i < La->length) {
Lc->data[k++] = La->data[i++];
}
Lc->length = k;
}
```
最后,我们可以编写一个菜单函数,让用户选择要执行的操作:
```c
void Menu()
{
SqList La, Lb, Lc;
int i, j, opt;
printf("请输入集合 A 的元素个数:");
scanf("%d", &La.length);
printf("请输入集合 A 的元素:");
for (i = 0; i < La.length; i++) {
scanf("%d", &La.data[i]);
}
printf("请输入集合 B 的元素个数:");
scanf("%d", &Lb.length);
printf("请输入集合 B 的元素:");
for (i = 0; i < Lb.length; i++) {
scanf("%d", &Lb.data[i]);
}
SortList(&La);
SortList(&Lb);
printf("请选择要执行的操作:\n");
printf("1. 求并集\n");
printf("2. 求交集\n");
printf("3. 求差集\n");
scanf("%d", &opt);
switch (opt) {
case 1:
Union(&La, &Lb, &Lc);
printf("集合 A 和集合 B 的并集为:");
for (i = 0; i < Lc.length; i++) {
printf("%d ", Lc.data[i]);
}
printf("\n");
break;
case 2:
Intersection(&La, &Lb, &Lc);
printf("集合 A 和集合 B 的交集为:");
for (i = 0; i < Lc.length; i++) {
printf("%d ", Lc.data[i]);
}
printf("\n");
break;
case 3:
Difference(&La, &Lb, &Lc);
printf("集合 A 和集合 B 的差集为:");
for (i = 0; i < Lc.length; i++) {
printf("%d ", Lc.data[i]);
}
printf("\n");
break;
default:
printf("输入有误!\n");
break;
}
}
```
这样,我们就完成了这个程序的编写。用户可以根据菜单选择要执行的操作,程序会自动计算并输出结果。
阅读全文