利用顺序表实现两个整数集合的交、并、差的运算,写一段C语言实现代码】
时间: 2024-04-29 11:26:45 浏览: 107
基于顺序表实现集合的并交差运算实验报告.docx
以下是利用顺序表实现两个整数集合的交、并、差的运算的C语言实现代码:
```
#include <stdio.h>
#define MAXSIZE 100 // 集合最大大小
// 定义顺序表结构体
typedef struct {
int elem[MAXSIZE]; // 存储元素
int length; // 当前长度
} SqList;
// 初始化顺序表
void InitList(SqList *L) {
L->length = 0;
}
// 添加元素到顺序表
int AddElem(SqList *L, int elem) {
if (L->length == MAXSIZE) {
return -1; // 集合已满
}
// 判断元素是否已经在集合中
for (int i = 0; i < L->length; i++) {
if (L->elem[i] == elem) {
return 0; // 元素已经存在
}
}
L->elem[L->length++] = elem; // 添加元素
return 1;
}
// 从顺序表删除元素
int DelElem(SqList *L, int elem) {
int i, j;
for (i = 0; i < L->length; i++) {
if (L->elem[i] == elem) {
for (j = i; j < L->length - 1; j++) {
L->elem[j] = L->elem[j + 1];
}
L->length--;
return 1; // 成功删除元素
}
}
return 0; // 元素不存在
}
// 顺序表集合求交运算
SqList Intersect(SqList L1, SqList L2) {
SqList L;
InitList(&L);
for (int i = 0; i < L1.length; i++) {
for (int j = 0; j < L2.length; j++) {
if (L1.elem[i] == L2.elem[j]) {
AddElem(&L, L1.elem[i]); // 记录交集元素
}
}
}
return L; // 返回交集结果
}
// 顺序表集合求并运算
SqList Union(SqList L1, SqList L2) {
SqList L;
InitList(&L);
// 先将L1的元素加入新集合中
for (int i = 0; i < L1.length; i++) {
AddElem(&L, L1.elem[i]);
}
// 再将L2中不在L1中的元素加入新集合中
for (int i = 0; i < L2.length; i++) {
if (AddElem(&L, L2.elem[i]) == 0) {
DelElem(&L, L2.elem[i]); // 已经在L1中的元素不重复添加
}
}
return L; // 返回并集结果
}
// 顺序表集合求差运算
SqList Difference(SqList L1, SqList L2) {
SqList L;
InitList(&L);
// 先将L1的元素加入新集合中
for (int i = 0; i < L1.length; i++) {
AddElem(&L, L1.elem[i]);
}
// 再将L2中在L1中的元素从新集合中删去
for (int i = 0; i < L2.length; i++) {
DelElem(&L, L2.elem[i]);
}
return L; // 返回差集结果
}
int main() {
SqList L1, L2, L;
InitList(&L1);
InitList(&L2);
// 向 L1 和 L2 集合中添加一些元素
AddElem(&L1, 1);
AddElem(&L1, 2);
AddElem(&L1, 3);
AddElem(&L1, 4);
AddElem(&L1, 5);
AddElem(&L2, 3);
AddElem(&L2, 4);
AddElem(&L2, 5);
AddElem(&L2, 6);
AddElem(&L2, 7);
// 求交集
L = Intersect(L1, L2);
printf("交集:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.elem[i]);
}
printf("\n");
// 求并集
L = Union(L1, L2);
printf("并集:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.elem[i]);
}
printf("\n");
// 求差集
L = Difference(L1, L2);
printf("差集:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.elem[i]);
}
printf("\n");
return 0;
}
```
阅读全文