컴퓨터공학 💻 도서관📚

집합 자료구조 C언어 본문

💯🌊자료구조&알고리즘/C언어

집합 자료구조 C언어

들판속초록풀 2025. 4. 13. 12:43

아래 코드에서는 구조체 멤버변수 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