编程 整数集合用单链表实现存储,设集合中元素互不相同,实现如下操作:(30分) (1) 初始化集合 (2) 按指定位置插入一个数到集合 (3) 按值删除集合中的元素 (4) 按值在集合中进行查找 (5) 清空集合 (6) 求两个集合的交集 (7) 求两个集合的并集 (8) 求两个集合的差集 (9) 输出集合
时间: 2023-05-20 08:01:26 浏览: 104
以下是整数集合用单链表实现存储的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
typedef struct {
Node *head;
int size;
} Set;
void initSet(Set *set) {
set->head = NULL;
set->size = 0;
}
void insert(Set *set, int data) {
Node *newNode = (Node *) malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (set->head == NULL) {
set->head = newNode;
} else {
Node *current = set->head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
set->size++;
}
void delete(Set *set, int data) {
Node *current = set->head;
Node *previous = NULL;
while (current != NULL) {
if (current->data == data) {
if (previous == NULL) {
set->head = current->next;
} else {
previous->next = current->next;
}
free(current);
set->size--;
return;
}
previous = current;
current = current->next;
}
}
int search(Set *set, int data) {
Node *current = set->head;
while (current != NULL) {
if (current->data == data) {
return 1;
}
current = current->next;
}
return 0;
}
void clear(Set *set) {
Node *current = set->head;
Node *next;
while (current != NULL) {
next = current->next;
free(current);
current = next;
}
set->head = NULL;
set->size = 0;
}
void intersection(Set *set1, Set *set2, Set *result) {
Node *current1 = set1->head;
while (current1 != NULL) {
if (search(set2, current1->data)) {
insert(result, current1->data);
}
current1 = current1->next;
}
}
void unionSet(Set *set1, Set *set2, Set *result) {
Node *current1 = set1->head;
Node *current2 = set2->head;
while (current1 != NULL) {
insert(result, current1->data);
current1 = current1->next;
}
while (current2 != NULL) {
if (!search(set1, current2->data)) {
insert(result, current2->data);
}
current2 = current2->next;
}
}
void difference(Set *set1, Set *set2, Set *result) {
Node *current1 = set1->head;
while (current1 != NULL) {
if (!search(set2, current1->data)) {
insert(result, current1->data);
}
current1 = current1->next;
}
}
void printSet(Set *set) {
Node *current = set->head;
printf("{ ");
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("}\n");
}
int main() {
Set set1, set2, result;
initSet(&set1);
initSet(&set2);
initSet(&result);
insert(&set1, 1);
insert(&set1, 2);
insert(&set1, 3);
insert(&set1, 4);
insert(&set1, 5);
insert(&set2, 3);
insert(&set2, 4);
insert(&set2, 5);
insert(&set2, 6);
insert(&set2, 7);
printf("Set 1: ");
printSet(&set1);
printf("Set 2: ");
printSet(&set2);
intersection(&set1, &set2, &result);
printf("Intersection: ");
printSet(&result);
clear(&result);
unionSet(&set1, &set2, &result);
printf("Union: ");
printSet(&result);
clear(&result);
difference(&set1, &set2, &result);
printf("Difference (set1 - set2): ");
printSet(&result);
clear(&result);
difference(&set2, &set1, &result);
printf("Difference (set2 - set1): ");
printSet(&result);
clear(&result);
return 0;
}
```
输出结果如下:
```
Set 1: { 1 2 3 4 5 }
Set 2: { 3 4 5 6 7 }
Intersection: { 3 4 5 }
Union: { 1 2 3 4 5 6 7 }
Difference (set1 - set2): { 1 2 }
Difference (set2 - set1): { 6 7 }
```