C语言顺序表实现集合运算:并集、交集、差集、补集

简介

本文介绍如何使用 C 语言的顺序表实现集合的运算,包括:

  • 构造集合* 求并集* 求交集* 求差集* 求补集

代码实现c#include <stdio.h>#include <stdbool.h>#include <stdlib.h>

#define MAX_SIZE 26

typedef struct { char data[MAX_SIZE]; int length;} SeqList;

// 初始化顺序表void init(SeqList *list) { list->length = 0;}

// 在顺序表中查找元素位置int find(SeqList *list, char element) { for (int i = 0; i < list->length; i++) { if (list->data[i] == element) { return i; } } return -1;}

// 向顺序表中添加元素void add(SeqList *list, char element) { if (list->length == MAX_SIZE) { printf('顺序表已满,无法添加元素! '); return; } list->data[list->length++] = element;}

// 从顺序表中删除指定位置的元素void removeElement(SeqList *list, int index) { if (index < 0 || index >= list->length) { printf('非法的索引位置! '); return; } for (int i = index; i < list->length - 1; i++) { list->data[i] = list->data[i + 1]; } list->length--;}

// 构造集合void constructSet(SeqList *list) { char input[MAX_SIZE]; printf('请输入元素集合(以回车结束): '); fgets(input, sizeof(input), stdin); for (int i = 0; input[i] != '�'; i++) { if (input[i] >= 'a' && input[i] <= 'z') { add(list, input[i]); } } printf('集合构造完成! ');}

// 求并集void unionSet(SeqList *list1, SeqList *list2, SeqList *result) { for (int i = 0; i < list1->length; i++) { add(result, list1->data[i]); } for (int i = 0; i < list2->length; i++) { if (find(result, list2->data[i]) == -1) { add(result, list2->data[i]); } }}

// 求交集void intersectSet(SeqList *list1, SeqList *list2, SeqList *result) { for (int i = 0; i < list1->length; i++) { if (find(list2, list1->data[i]) != -1) { add(result, list1->data[i]); } }}

// 求差集void differenceSet(SeqList *list1, SeqList *list2, SeqList *result) { for (int i = 0; i < list1->length; i++) { if (find(list2, list1->data[i]) == -1) { add(result, list1->data[i]); } }}

// 求补集void complementSet(SeqList *list, SeqList *result) { for (char c = 'a'; c <= 'z'; c++) { if (find(list, c) == -1) { add(result, c); } }}

// 打印集合void printSet(SeqList *list) { if (list->length == 0) { printf('集合为空! '); } else { for (int i = 0; i < list->length; i++) { printf('%c ', list->data[i]); } printf(' '); }}

int main() { SeqList set1, set2, resultSet; init(&set1); init(&set2); init(&resultSet);

int choice;    while (true) {        printf('

请选择操作: '); printf('1. 构造集合1 '); printf('2. 构造集合2 '); printf('3. 求并集 '); printf('4. 求交集 '); printf('5. 求差集 '); printf('6. 求补集 '); printf('7. 退出 '); scanf('%d', &choice);

    switch (choice) {            case 1:                constructSet(&set1);                printf('集合1的内容为:');                printSet(&set1);                break;

        case 2:                constructSet(&set2);                printf('集合2的内容为:');                printSet(&set2);                break;

        case 3:                unionSet(&set1, &set2, &resultSet);                printf('集合1和集合2的并集为:');                printSet(&resultSet);                init(&resultSet);                break;

        case 4:                intersectSet(&set1, &set2, &resultSet);                printf('集合1和集合2的交集为:');                printSet(&resultSet);                init(&resultSet);                break;

        case 5:                differenceSet(&set1, &set2, &resultSet);                printf('集合1和集合2的差集为:');                printSet(&resultSet);                init(&resultSet);                break;

        case 6:                complementSet(&set1, &resultSet);                printf('集合1的补集为:');                printSet(&resultSet);                init(&resultSet);                break;

        case 7:                printf('程序已退出!

'); exit(0);

        default:                printf('非法的选择!

'); break; } }

return 0;}

代码说明

  • 该程序使用顺序表 SeqList 来表示集合,并定义了相应的操作函数。* constructSet 函数用于构造集合,它接收用户输入的字符串,并将其中的小写字母添加到集合中。* unionSetintersectSetdifferenceSetcomplementSet 函数分别用于求两个集合的并集、交集、差集和补集。* printSet 函数用于打印集合的内容。* main 函数提供了一个用户界面,允许用户选择不同的操作并输入相应的数据。

总结

本文介绍了如何使用 C 语言的顺序表实现集合的运算,并提供了完整的代码示例。该程序可以帮助用户理解集合的概念和操作,并为实际应用提供参考。

C语言顺序表实现集合运算:并集、交集、差集、补集

原文地址: https://www.cveoy.top/t/topic/diLR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录