用c语言 编制一个能演示执行集合的交、并和差运算的程序。 【任务要求】 1)集合元素用小写英文字母,执行各种操作应以对话方式执行。 算法要点:利用单链表表示集合;有增删功能,带中文注释
时间: 2024-05-16 13:16:11 浏览: 102
集合的并、交和差运算的算法.docx
下面是一个用 C 语言编写的简单程序,可以演示集合的交、并和差运算:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表节点结构体
typedef struct Node {
char data;
struct Node *next;
} Node;
// 定义集合结构体
typedef struct Set {
Node *head;
} Set;
// 初始化集合
void init_set(Set *set) {
set->head = NULL;
}
// 判断元素是否在集合中
int in_set(Set *set, char c) {
Node *p = set->head;
while (p != NULL) {
if (p->data == c) {
return 1;
}
p = p->next;
}
return 0;
}
// 插入元素到集合中
void insert_set(Set *set, char c) {
if (!in_set(set, c)) {
Node *p = (Node *) malloc(sizeof(Node));
p->data = c;
p->next = set->head;
set->head = p;
}
}
// 从集合中删除元素
void delete_set(Set *set, char c) {
if (set->head == NULL) {
return;
}
if (set->head->data == c) {
Node *p = set->head;
set->head = set->head->next;
free(p);
return;
}
Node *p = set->head;
while (p->next != NULL && p->next->data != c) {
p = p->next;
}
if (p->next != NULL) {
Node *q = p->next;
p->next = q->next;
free(q);
}
}
// 打印集合中的元素
void print_set(Set *set) {
Node *p = set->head;
while (p != NULL) {
printf("%c ", p->data);
p = p->next;
}
printf("\n");
}
// 集合交运算
void intersection(Set *set1, Set *set2, Set *result) {
Node *p = set1->head;
while (p != NULL) {
if (in_set(set2, p->data)) {
insert_set(result, p->data);
}
p = p->next;
}
}
// 集合并运算
void union_set(Set *set1, Set *set2, Set *result) {
Node *p = set1->head;
while (p != NULL) {
insert_set(result, p->data);
p = p->next;
}
p = set2->head;
while (p != NULL) {
insert_set(result, p->data);
p = p->next;
}
}
// 集合差运算
void difference(Set *set1, Set *set2, Set *result) {
Node *p = set1->head;
while (p != NULL) {
if (!in_set(set2, p->data)) {
insert_set(result, p->data);
}
p = p->next;
}
}
int main() {
Set set1, set2, result;
char input[100], op;
init_set(&set1);
init_set(&set2);
init_set(&result);
// 输入集合1
printf("请输入集合1中的元素(用逗号分隔):");
fgets(input, 100, stdin);
for (int i = 0; i < strlen(input); i++) {
if (input[i] != ',' && input[i] != ' ') {
insert_set(&set1, input[i]);
}
}
// 输入集合2
printf("请输入集合2中的元素(用逗号分隔):");
fgets(input, 100, stdin);
for (int i = 0; i < strlen(input); i++) {
if (input[i] != ',' && input[i] != ' ') {
insert_set(&set2, input[i]);
}
}
// 执行运算
printf("请选择要执行的运算(交/并/差):");
scanf("%c", &op);
switch (op) {
case '交':
intersection(&set1, &set2, &result);
printf("集合1和集合2的交集为:");
print_set(&result);
break;
case '并':
union_set(&set1, &set2, &result);
printf("集合1和集合2的并集为:");
print_set(&result);
break;
case '差':
difference(&set1, &set2, &result);
printf("集合1和集合2的差集为:");
print_set(&result);
break;
default:
printf("无效的运算符!\n");
break;
}
return 0;
}
```
程序可以通过命令行交互的方式,让用户输入两个集合,然后选择要执行的交、并或差运算,最后输出结果。具体实现方式可以参考上面的代码。
阅读全文