Page 286 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 286
두 집합의 교집합을 구하는 Intersection 함수
Intersection 함수는 집합 s2, s3의 교집합을 s1에 대입하는 함수입니다. 먼저 s1을 공집합으
로 초기화합니다. 이때 집합 s2의 모든 원소를 스캔하면서 s2의 원소가 s3에 있다면 s1에 추
가합니다. 스캔이 끝나면 s1에는 교집합의 원소가 포함되고, s1의 포인터를 반환합니다.
두 집합의 차집합을 구하는 Difference 함수
Difference 함수는 집합 s2, s3의 차집합을 s1에 대입하는 함수입니다. 먼저 s1을 공집합으로
초기화합니다. 이때 집합 s2의 모든 원소를 스캔하면서 s2의 원소가 s3에 있다면 s1에 추가합
니다. 이 역시도 스캔이 끝나면 s1에는 차집합의 원소가 포함되고, s1의 포인터를 반환합니다.
집합의 모든 원소를 출력하는 Print와 PrintLn 함수
Print, PrintLn 함수는 집합의 모든 원소를 출력하는 함수입니다. 예를 들어, 집합 s = {1, 5,
7}인 경우 ‘{1 5 7}’이라고 출력합니다. 두 함수의 차이는 줄 바꿈 문자의 포함 여부입니다.
메모리를 정리하고 종료하는 Terminate 함수
Terminate 함수는 모든 과정을 정리하는 함수입니다.
Q1 실습 7-2 프로그램에 다음 8개의 함수를 추가하세요.
연습
문제
/* 집합이 가득 찼다면 1, 아니면 0을 반환 */
int IsFull(const IntSet *s);
/* 집합의 모든 원소를 삭제하는 함수 */
void Clear(IntSet *s);
/* 집합 s2, s3의 대칭 차를 s1에 대입하는 함수 */
IntSet *symmetricDifference(IntSet *s1, const IntSet *s2, const IntSet *s3);
/* 집합 s1에 s2의 모든 원소를 추가하는 함수(s1 포인터 반환) */
IntSet *ToUnion(IntSet *s1, const IntSet *s2);
/* 집합 s1에서 s2에 들어 있지 않은 모든 원소를 삭제하는 함수(s1 포인터 반환) */
IntSet *ToIntersection(IntSet *s1, const IntSet *s2);
/* 집합 s1에서 s2에 들어 있는 모든 원소를 삭제하는 함수(s1 포인터 반환) */
IntSet *ToDifference(IntSet *s1, const IntSet *s2);
286 C 알고리즘