用C语言 编制一个能演示执行集合的交、并和差运算的程序。 【任务要求】 1)集合元素用小写英文字母或者数字字符表示,执行各种操作应以对话方式执行。 2)算法要点:利用单链表表示集合;用中文显示过程
时间: 2024-03-10 11:43:35 浏览: 76
好的,我来回答你的问题。关于你的任务要求,我可以给你一份C语言程序示例,可以演示执行集合的交、并和差运算。下面是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
// 定义节点结构体
typedef struct node {
char data;
struct node *next;
} Node;
// 定义集合结构体
typedef struct set {
Node *head;
int size;
} Set;
// 创建节点
Node* create_node(char data) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
// 初始化集合
void init(Set *set) {
set->head = NULL;
set->size = 0;
}
// 插入元素
void insert(Set *set, char data) {
Node *new_node = create_node(data);
if (set->head == NULL) {
set->head = new_node;
} else {
Node *p = set->head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_node;
}
set->size++;
}
// 删除元素
void remove_node(Set *set, char data) {
Node *p = set->head;
Node *q = NULL;
while (p != NULL && p->data != data) {
q = p;
p = p->next;
}
if (p != NULL) {
if (q == NULL) {
set->head = p->next;
} else {
q->next = p->next;
}
free(p);
set->size--;
}
}
// 显示集合
void display(Set set) {
printf("{ ");
Node *p = set.head;
while (p != NULL) {
printf("%c ", p->data);
p = p->next;
}
printf("}\n");
}
// 集合交运算
Set intersection(Set set1, Set set2) {
Set set;
init(&set);
Node *p = set1.head;
while (p != NULL) {
if (strstr(set2.head, &(p->data)) != NULL) {
insert(&set, p->data);
}
p = p->next;
}
return set;
}
// 集合并运算
Set union_set(Set set1, Set set2) {
Set set;
init(&set);
Node *p = set1.head;
while (p != NULL) {
insert(&set, p->data);
p = p->next;
}
p = set2.head;
while (p != NULL) {
if (strstr(set.head, &(p->data)) == NULL) {
insert(&set, p->data);
}
p = p->next;
}
return set;
}
// 集合差运算
Set difference(Set set1, Set set2) {
Set set;
init(&set);
Node *p = set1.head;
while (p != NULL) {
if (strstr(set2.head, &(p->data)) == NULL) {
insert(&set, p->data);
}
p = p->next;
}
return set;
}
int main() {
Set set1, set2, set;
char data[MAX];
int choice;
// 初始化集合
init(&set1);
init(&set2);
init(&set);
// 插入元素
printf("请输入集合1的元素(以空格隔开,以#结束):");
scanf("%s", data);
while (strcmp(data, "#") != 0) {
insert(&set1, data[0]);
scanf("%s", data);
}
printf("请输入集合2的元素(以空格隔开,以#结束):");
scanf("%s", data);
while (strcmp(data, "#") != 0) {
insert(&set2, data[0]);
scanf("%s", data);
}
// 显示集合
printf("集合1:");
display(set1);
printf("集合2:");
display(set2);
// 执行集合运算
do {
printf("请选择要进行的集合运算:\n");
printf("1.交运算\n");
printf("2.并运算\n");
printf("3.差运算\n");
printf("0.退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
set = intersection(set1, set2);
printf("集合1与集合2的交集为:");
display(set);
break;
case 2:
set = union_set(set1, set2);
printf("集合1与集合2的并集为:");
display(set);
break;
case 3:
set = difference(set1, set2);
printf("集合1与集合2的差集为:");
display(set);
break;
case 0:
printf("程序已退出\n");
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (choice != 0);
return 0;
}
```
以上就是一个能演示执行集合的交、并和差运算的程序,希望能对你有所帮助。如果你还有其他问题,欢迎继续提问!
阅读全文