컴퓨터공학 💻 도서관📚
집합 자료구조 C언어 본문
아래 코드에서는 구조체 멤버변수 size 변수가 있어서 while문이 아닌 for문으로 코드를 짤 수 있
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
// 집합 구조체
typedef struct {
int elements[MAX_SIZE];
int size;
} Set;
// 집합에 원소 추가 (중복 방지)
void addElement(Set *set, int elem) {
for (int i = 0; i < set->size; i++) {
if (set->elements[i] == elem)
return; // 이미 존재하면 추가하지 않음
}
if (set->size < MAX_SIZE) {
set->elements[set->size++] = elem;
}
}
// 합집합
Set unionSet(Set *a, Set *b) {
Set result = {.size = 0};
for (int i = 0; i < a->size; i++)
addElement(&result, a->elements[i]);
for (int i = 0; i < b->size; i++)
addElement(&result, b->elements[i]);
return result;
}
// 교집합
Set intersectionSet(Set *a, Set *b) {
Set result = {.size = 0};
for (int i = 0; i < a->size; i++) {
if (contains(b, a->elements[i]))
addElement(&result, a->elements[i]);
}
return result;
}
// 차집합 (a - b)
Set differenceSet(Set *a, Set *b) {
Set result = {.size = 0};
for (int i = 0; i < a->size; i++) {
if (!contains(b, a->elements[i]))
addElement(&result, a->elements[i]);
}
return result;
}
// 원소가 집합에 존재하는지 확인 (소속)
bool contains(Set *set, int elem) {
for (int i = 0; i < set->size; i++) {
if (set->elements[i] == elem)
return true;
}
return false;
}
// 부분집합인지 확인 (a ⊆ b)
bool isSubset(Set *a, Set *b) {
for (int i = 0; i < a->size; i++) {
if (!contains(b, a->elements[i]))
return false;
}
return true;
}
// 집합 출력
void printSet(Set *set) {
printf("{ ");
for (int i = 0; i < set->size; i++) {
printf("%d ", set->elements[i]);
}
printf("}\n");
}
// 테스트용 main 함수
int main() {
Set A = {.size = 0};
Set B = {.size = 0};
// A = {1, 2, 3, 4}
addElement(&A, 1);
addElement(&A, 2);
addElement(&A, 3);
addElement(&A, 4);
// B = {3, 4, 5, 6}
addElement(&B, 3);
addElement(&B, 4);
addElement(&B, 5);
addElement(&B, 6);
printf("A = "); printSet(&A);
printf("B = "); printSet(&B);
Set u = unionSet(&A, &B);
Set i = intersectionSet(&A, &B);
Set d = differenceSet(&A, &B);
printf("A ∪ B = "); printSet(&u);
printf("A ∩ B = "); printSet(&i);
printf("A - B = "); printSet(&d);
printf("5 ∈ A? %s\n", contains(&A, 5) ? "Yes" : "No");
printf("A ⊆ B? %s\n", isSubset(&A, &B) ? "Yes" : "No");
return 0;
}
'💯🌊자료구조&알고리즘 > C언어' 카테고리의 다른 글
큐 자료구조 c언어 (0) | 2025.04.21 |
---|---|
스택 자료구조 c언어 (0) | 2025.04.21 |
원형연결리스트 C언어 (0) | 2025.04.08 |
이중연결리스트 (C언어) (0) | 2025.04.04 |
단일 연결 리스트 (0) | 2025.03.31 |
Comments